Java-скрипт, сложность получения списка всех вложенных фреймов на странице
Привет мне нужно получить список всех кадров для моего GreaseMonkey сценарий, но на самом деле я думаю, что это общий вопрос Javascript. Было бы здорово, если бы я мог добраться до каждого кадра, вложенного в страницу. До сих пор у меня была проблема с получением количества фреймов, вложенных в основные фреймы документов.
страница, с которой я имею дело, состоит из frameset что это многоуровневая и фреймы содержат другие фреймы. Мне удалось получить информация о фреймах верхнего уровня набора фреймов основного документа (в коде
3 ответов
проблема-это событие, которое вы называете этим. $(document).ready()
запускается при загрузке текущего DOM. Таким образом, он запускается, когда загружаются 3 основных фрейма. Но в этот момент эти кадры не загрузили их iframes
еще. Изменив событие на
Решение Рабочего Кода
используйте рекурсивную функцию и window
load
событие, например (работает в последних версиях Chrome, FireFox и Edge; не тестировал другие. Вероятно, работает и в IE5+).
используйте этот код на своем верхнем уровне frameset
, frame0.НТМ:
<!DOCTYPE HTML Frameset DTD>
<html>
<head>
<script>
window.onload = function()
{
var allFrames = [];
function recursFrames(context)
{
for(var i = 0; i < context.frames.length; i++)
{
console.log(context.frames[i].name + " -- " + context.frames[i].location.href);
allFrames.push(context.frames[i]);
recursFrames(context.frames[i]);
}
}
recursFrames(window);
console.log("Frames count: " + allFrames.length);
}
</script>
</head>
<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>
это пишет на консоль, чтобы показать вам, что происходит, но, конечно, вы можете делать все, что хотите с этой информацией. Это создает плоский список (массив) всех дочерних фреймов, но вы можете структурировать его иерархически, если хотите, или что угодно.
HTML 5 напоминание
вы используете HTML5 DOCTYPE
, а frameset
не поддерживается HTML5. Но это зависит от браузера, чтобы решить, когда прекратить поддерживать это, и многие из них все еще делают. Я рекомендую вам прекратить использовать frameset
В настоящее время. Использовать iframe
вместо этого, если вам нужно фреймовое поведение (разные окна и документы).
frameset не поддерживается в в HTML5.
пожалуйста, смотрите следующую демонстрацию:frameset Demo. Я изменил файлы htm. Идея состоит в том, чтобы прослушать событие frameset onload и получить доступ к его содержимому после запуска события onlnoad.
для доступа к содержимому дочернего фрейма,политика того же происхождения должен быть вызван.