Здравствуйте, мне нужно получить список всех фреймов для моего GreaseMonkey script, но на самом деле я предполагаю, что это общий вопрос Javascript. Было бы здорово, если бы я смог добраться до каждого кадра, который вложен в страницу. До сих пор мне не удалось получить количество кадров, вложенных в основные рамки документа.
Страница Я имею дело с состоянием frameset, которое многоуровневое, а фреймы содержат другие фреймы. Мне удалось получить информацию о кадрах верхнего уровня основного набора фреймов документов (в коде уровень 1), но на этом уровне я получаю информацию о том, что количество кадров для этих фреймов равно 0, что неверно.
Я придумал следующий код
$(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);});
Значит уровень 0, который на самом деле является номером основного документа и уровнем 1 именами или основными фреймами документа - эти данные сообщаются правильно, но не количество кадров каждого уровень 1. И я хочу знать, если это потому, что мой код получил ошибки или, может быть, потому, что подкадры полностью не загружены.
Я попытался вызвать свой код с помощью ярлыка на клавиатуре, ведь все будет выглядеть полностью загруженным, но вот еще одна проблема, похоже, что следующий код, похоже, не работает со страницей, состоящей только из фреймов
(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);})();
Лучше всего было бы, если бы код автоматически расчесывал все кадры и подкадры, но с его текущей формой (где каждый уровень получил собственный цикл) тоже хорош.
Проблема с невозможностью использования сочетания клавиш является вторичной. Главное - получать правильные подсчеты кадров внутри фреймов основного документа и далее.
EDIT: Пример вывода и Моя тестовая страница с вложенным набором фреймов
Выход
уровень 0 > 3
уровень 1 - 0 > main1 - 0
уровень 1 - 1 > main2 - 0
уровень 1 - 2 > main3 - 0
тестовая страница с вложенным набором фреймов
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="#" onclick="location.href='http://www.google.com'; return false;">testlink</a>
</body>
</html>