Hallo, ich brauche eine Liste aller Frames für meine GreaseMonkey Skript, aber in der Tat, ich denke, es ist allgemeine Javascript-Frage. Es wäre großartig, wenn ich zu jedem einzelnen Frame gelangen könnte, der in der Seite verschachtelt ist. Bisher habe ich Probleme bekommen, die Anzahl der Frames in den Hauptdokumenten zu verschachteln.Java Script, Schwierigkeit, Liste aller verschachtelten Frames auf Seite
Seite I mit zu tun habe aus Frameset die Multi-Level- und Frames enthält andere Frames. Ich habe es geschafft, Informationen über Top-Level-Frames des Hauptdokument Frameset (in Code Level 1) zu bekommen, aber auf dieser Ebene bekomme ich Informationen, dass Frame-Anzahl für diese Frames gleich 0 ist, was nicht wahr ist.
kam ich habe oben mit folgendem Code
$(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);});
So Ebene 0, die in der Tat Zählung Hauptdokument Rahmen und Ebene 1 Namen oder Hauptdokument Rahmen - diese Dinge sind korrekt gemeldet, aber nicht die Anzahl der Bilder von jedem Level 1 Rahmen. Und ich möchte wissen, ob es daran liegt, dass mein Code Fehler hat oder weil Subframes nicht vollständig geladen sind.
Ich habe versucht, meinen Code aus Tastenkombination aufrufen, wird schließlich wie seine vollständig geladen aussehen, aber hier ein anderes Problem, Code scheint wie folgt scheint nicht mit Seite zu arbeiten, die nur von Frame-Set bestehen
(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);})();
Am besten wäre, wenn der Code automatisch alle Frames und Subframes durchkämmt, aber mit seiner aktuellen Form (wo jeder Level seinen eigenen Loop hat) ist das auch gut.
Problem mit der Unfähigkeit, Abkürzungschlüssel zu verwenden, ist sekundär. Hauptsache ist die richtige Anzahl von Frames in Frames des Hauptdokuments und darüber hinaus.
EDIT: Beispielausgabe und Meine Testseite mit verschachteltem Frameset
Ausgabe
Ebene 0> 3
Stufe 1 - 0> main1 - 0
Ebene 1 - 1> Haupt2 - 0
Stufe 1 - 2> MAIN3 - 0
Testseite mit verschachtelten Frameset
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>
Wenn einer Ihrer Frames aus einer anderen Domäne stammt, haben Sie keinen Zugriff auf deren Inhalt (und damit auf Sub-Frames). Außerdem haben Sie einen offensichtlichen Fehler in Ihrem Code: 'frames2 [j] .frames.length'. – jcaron
@jcaron Vielen Dank für das Aufzeigen von Fehlern, obwohl dieser Teil des Codes keine Chance hatte, ausgeführt zu werden, wenn ein Schritt vor der Zählung von 0 Bildern gemeldet wird. Ich bin mir der gleichen Herkunftspolitik bewusst und dies ist hier nicht der Fall. Ich habe immer noch keine Ahnung, warum ich Frames innerhalb von Frames des Hauptdokument-Frame-Sets nicht zählen kann. – MoreThanChaos
Wird Ihr Code überhaupt ausgeführt? Fügen Sie Protokolle (mit Hilfe von 'console.log', die Sie in Ihrer Browser-Konsole sehen können) an verschiedenen Stellen hinzu, um zu sehen, welche Teile ausgeführt werden, und protokollieren Sie relevante Daten. Das wäre viel bequemer als eine "Warnung". – jcaron