PDA

View Full Version : [JS] Prelevare codice html di un frame esterno al dominio


wingman87
09-11-2007, 00:18
Forse il titolo non è chiarissimo, quindi spiego più in dettaglio il mio problema.
Ho una pagina web contenente un frameset composto da due frame, uno in alto e l'altro che copre tutto il resto della pagina. Il frame in basso non punta a nulla, quello in alto punta a un'altra pagina web che ho scritto io con un javascript che avendo un vettore di indirizzi li apre nel frame sottostante uno ad uno ad intervalli regolari. Quello che ho bisogno di fare è fermare questo flusso continuo nel caso in cui all'interno del frame di basso ci siano particolari parole o frasi chiave. Per far questo avevo pensato di leggere il codice html di quel frame e poi usare un semplice indexOf per cercare le parole chiave. Quello che non riesco a fare è prelevare il codice html. Come devo fare?
Grazie!

wingman87
10-11-2007, 00:52
Mi è stato detto che non è possibile fare ciò che chiedo, non è che però esiste un qualche trucchetto per aggirare il problema? Io non uso js da tanto e non mi viene in mente nessuna soluzione...

Leron
10-11-2007, 11:05
php?

kk3z
10-11-2007, 11:32
Basandomi su quello che mi dice firebug, ho tirato fuori questo codice
var iframes = iframe_in cui_sei.ownerDocument.getElementsByTagName("iframe");
var iframe_che_ti_serve = iframes[1];

if (iframe_che_ti_serve.contentDocument.body.innerHTML.indexOf("parola chiave") != -1)
{
//Trovato
}

Non è testato.

wingman87
10-11-2007, 14:05
php?
Non posso, devo usare solo pagine statiche, devo farle lanciare ad utenti che non usano un webserver.
Basandomi su quello che mi dice firebug, ho tirato fuori questo codice
var iframes = iframe_in cui_sei.ownerDocument.getElementsByTagName("iframe");
var iframe_che_ti_serve = iframes[1];

if (iframe_che_ti_serve.contentDocument.body.innerHTML.indexOf("parola chiave") != -1)
{
//Trovato
}

Non è testato.
Ho provato però non so come tradurre iframe_in cui_sei, con il nome non va, con document neanche, non so, scusa l'ignoranza...
EDIT: ho provato con top.document.getElementsByTagName("frame"); e almeno va avanti, in effetti frames vale 2, però si blocca all'istruzione di ricerca che è quella fondamentale...

MEMon
10-11-2007, 17:28
Basandomi su quello che mi dice firebug, ho tirato fuori questo codice
var iframes = iframe_in cui_sei.ownerDocument.getElementsByTagName("iframe");
var iframe_che_ti_serve = iframes[1];

if (iframe_che_ti_serve.contentDocument.body.innerHTML.indexOf("parola chiave") != -1)
{
//Trovato
}

Non è testato.
Se l'iframe contiene una pagina esterna dal tuo dominio non lo puoi fare, in quanto avrai un "permesso negato".

wingman87
12-11-2007, 16:08
Ma dove trovo la documentazione ufficiale? Magari si trova qualche scappatoia..

BlackAuron
12-11-2007, 23:25
forse ti conviene dare una ripassata alla cross domain policy di javascript :D
Nel caso in cui l'iframe sia esterno al dominio dal quale esegui la chiamata, allora non otterrai mai i permessi per leggere l'html della pagina.
L'unica cosa che puoi fare, è appoggiarti ad un sito esterno, come può essere www.palary.com, che, una volta passata una query creata a dovere, ti ritorna un oggetto json, che puoi richiamare attraverso uno <script src...>

wingman87
13-11-2007, 00:13
Mi puoi spiegare di che si tratta? Ad ogni modo più che una ripassata avrei proprio bisogno di un'infarinatura, non ho mai usato javascript quello che ho fatto finora l'ho fatto a logica vedendo un po' di esempi per capire come si usava, solo che non so dove trovare la documentazione ufficiale, ho trovato questo:
http://www.w3schools.com/jsref/default.asp
ma di ufficiale non c'è nulla?
Il link che hai postato non mi funziona.

BlackAuron
13-11-2007, 00:26
si, ho notato ora che palary è stato abbattuto... spero sia una cosa temporanea :) In ogni caso, per quanto riguarda il js basta che ti compri una guida in libreria ( se non sbaglio, la "javascript bible" dovrebbe essere fatta piuttosto bene).
Per quanto riguarda invece json e le domain restrictions, prendi come punto di partenza wikipedia e vedi che riesci ad ottenere ( di solito in fondo alla pagina, tra i link, trovi ottime risorse).
Ti indirizzerei a qualcosa di più preciso, ma sinceramente non avrei idea di dove trovare risorse decenti a riguardo: personalmente mi sono fatto un collage di roba reperita dalla rete, e me lo sono assimilato col tempo.

wingman87
13-11-2007, 00:33
Ok, ci proverò, grazie. Comunque mi sembra strano che non ci sia nulla di ufficiale...

BlackAuron
13-11-2007, 00:49
http://www.w3schools.com/js/default.asp
le linee guida qua le puoi trovare, e non credo ci sia nulla di più ufficiale. Ma non mi pare che sia esattamente una "guida"...

wingman87
13-11-2007, 00:54
Quello che mi serve in effetti non è una guida, so già programmare in altri linguaggi e non trovo js difficile da imparare, anzi.. è piuttosto un riferimento tipo l'MSDN del .NET o il reference ufficiale del Java che trattano tutto senza tralasciare nulla e in modo approfondito. Ad esempio sta storia del fatto che non si può accedere a un frame con contenuto esterno l'ho scoperta provando e poi leggendo esperienze di altra gente su internet ma non l'ho ancora trovato scritto in modo ufficiale da nessuna parte.

BlackAuron
13-11-2007, 11:02
Il punto è che le restrizioni è il browser a dettarle, quindi difficilmente troverai qualcosa di ufficiale a riguardo nelle guide di js :)
Piuttosto, se nella pagina caricata nell'iframe puoi inserire del js, allora hai qualche chance di ottenerne i sorgenti.

wingman87
13-11-2007, 11:57
Capisco.. però io ho avuto un altro problema tempo fa, non riuscivo a chiudere le schede di firefox con javascript, ma poi ho scoperto che il problema era aggirabile cambiando una proprietà del browser in about:config. Magari c'è un modo per disattivare anche questa restrizione.
Piuttosto, se nella pagina caricata nell'iframe puoi inserire del js, allora hai qualche chance di ottenerne i sorgenti.
Le pagine non sono mie, sono cose tipo google, yahoo, eccetera..