Ciao ho bisogno di ottenere l'elenco di tutti i frame per la mia GreaseMonkey sceneggiatura, ma in realtà credo che sia generale domanda Javascript. Sarebbe bello se potessi arrivare a ogni singolo frame che è annidato nella pagina. Finora ho avuto problemi a ottenere il numero di fotogrammi annidati nei fotogrammi del documento principale.Java Script, difficoltà di ottenere l'elenco di tutti i frame nidificati in pagina
pagina ho a che fare sono costituiti da frame cioè multilivello e cornici contiene altri fotogrammi. Sono riuscito a ottenere informazioni sui frame di primo livello del set di frame del documento principale (nel codice livello 1) ma a questo livello ottengo informazioni che il numero di frame per questi frame è uguale a 0 che non è vero.
ho si avvicinò con seguente codice
$(document).ready(function(){
var frames = window.frames;
var i,j;
var reportText = "level 0 > " + frames.length +"\r\n";
for (i = 0; i < frames.length; i++) {
var frames2 = frames[i].frames;
reportText += "level 1 - " + i + " > " + frames[i].name + " - " + frames2.length +"\r\n";
for (j = 0; j < frames2.length; j++) {
var frames3 = frames2[j].frames;
reportText += "level 2 - " + i + " - " + j + " > " + frames2[j].name + " - " + frames3.length +"\r\n";
}
}
alert(reportText);});
Così livello 0 che è in realtà principale conteggio dei fotogrammi del documento e livello 1 nomi o nei quadri di documenti - queste cose sono riportati in modo corretto, ma non la quantità di frame di ciascun frame livello 1. E voglio sapere se è perché il mio codice ha degli errori o forse perché i sottoframe non sono stati caricati completamente.
Ho provato a chiamare il mio codice da scorciatoia da tastiera, dopo tutto avrà un aspetto come il suo stato caricato completamente, ma qui un altro problema, sembra come seguente codice sembra non funzionare con la pagina che consistono solo di frame
(function(){
document.addEventListener('keydown', function(e) {
if (e.keyCode == 72 && !e.shiftKey && !e.ctrlKey && e.altKey && !e.metaKey) {
//...my previous code inside document.ready...
}
}, false);})();
Il meglio sarebbe se il codice si pettina automaticamente attraverso tutti i fotogrammi e i sottoframe ma con la sua forma attuale (dove ogni livello ha il proprio ciclo) è anche un bene.
Il problema con l'impossibilità di utilizzare il tasto di scelta rapida è secondario. La cosa principale è ottenere conteggi corretti dei fotogrammi all'interno dei fotogrammi del documento principale e oltre.
EDIT: uscita del campione e la mia pagina di prova con nidificato frame
uscita
livello 0> 3
Livello 1 - 0> Principale1 - 0
livello 1 - 1> main2 - 0
livello 1 - 2> main3 - 0
pagina di prova con frame nidificato
frame0.htm
<!DOCTYPE html>
<html>
<frameset cols="25%,*,25%">
<frame id="frmain1" name="main1" src="frame0_1.htm">
<frame id="frmain2" name="main2" src="frame0_2.htm">
<frame id="frmain3" name="main3" src="frame0_3.htm">
</frameset>
</html>
frame0_1.htm
<!DOCTYPE html>
<html>
<frameset rows="25%,*">
<frame id="frsub11" name="sub11" src="frame0_1_1.htm">
<frame id="frsub12" name="sub12" src="frame0_1_2.htm">
</frameset>
</html>
frame0_1_1.htm
<!DOCTYPE html>
<html>
<body style="background: darkorange;">
</body>
</html>
frame0_1_2.htm
<!DOCTYPE html>
<html>
<body style="background: lightyellow;">
</body>
</html>
frame0_2.htm
<!DOCTYPE html>
<html>
<frameset rows="25%,*,25%">
<frame id="frsub21" name="sub21" src="frame0_2_1.htm">
<frame id="frsub22" name="sub22" src="frame0_2_2.htm">
<frame id="frsub23" name="sub23" src="frame0_2_3.htm">
</frameset>
</html>
frame0_2_1.htm
<!DOCTYPE html>
<html>
<body style="background: skyblue;">
</body>
</html>
frame0_2_2.htm
<!DOCTYPE html>
<html>
<body style="background: cornflowerblue;">
</body>
</html>
frame0_2_3.htm
<!DOCTYPE html>
<html>
<body style="background: slateblue;">
</body>
</html>
frame0_3.htm
<!DOCTYPE html>
<html>
<frameset rows="25%,*">
<frame id="frsub31" name="sub31" src="frame0_3_1.htm">
<frame id="frsub32" name="sub32" src="frame0_3_2.htm">
</frameset>
</html>
frame0_3_1.htm
<!DOCTYPE html>
<html>
<body style="background: darkgreen;">
</body>
</html>
frame0_3_2.htm
<!DOCTYPE html>
<html>
<body style="background: lightgreen;">
<a id="test" href="http://www.google.com">testlink</a>
</body>
</html>
Se uno dei frame proviene da un dominio diverso, non sarà possibile accedere ai relativi contenuti (e quindi ai sub-frame). Inoltre hai un evidente errore nel tuo codice qui: 'frames2 [j] .frames.lenght'. – jcaron
@jcaron Grazie per aver segnalato l'errore, sebbene questa parte di codice non abbia avuto la possibilità di eseguire quando viene segnalato un passo prima del conteggio di 0 fotogrammi. Sono a conoscenza della stessa politica di origine e questo non è il caso qui. Ancora non ho idea del perché non riesco a ottenere il conteggio dei frame all'interno dei frames del set di frame del documento principale. – MoreThanChaos
Il tuo codice è stato eseguito? Aggiungi registri (utilizzando 'console.log', che potrai vedere nella console del tuo browser) in diversi punti per vedere quali parti sono eseguite e registrare i dati rilevanti. Sarebbe molto più conveniente di un "allarme". – jcaron