Это сценарий: у нас есть x.html страница, которую можно загрузить как «автономную» страницу или как фрейм другой страницы y.html (тот же домен),На обеих страницах есть функция с именем setDirtyFlag () , которая просто устанавливает для внутреннего флага значение true или false .Когда x загружается внутри iframe y , он также должен установить родительский флаг dirty с тем же значением.Это код для x и y страниц:
x.html :
<html>
<head>
<script>
var setDirtyFlag=function(val) {
isDirty = val;
if (window.parent && window.parent.setDirtyFlag)
window.parent.setDirtyFlag(val);
}
setDirtyFlag(true);
</script>
</head>
<body>
This is the iframe
</body>
</html>
y.html :
<html>
<head>
<script>
var setDirtyFlag = function(val) {
alert('dirty flag set');
}
</script>
</head>
<body>
<iframe src="x.html"></iframe>
</body>
</html>
Вы можете создать два файла в папке и без проблем загрузить y.html , вы увидите предупреждение о том, что установлен флаг dirty,Но если вы загрузите x.html , очевидно, все в порядке, но сценарий входит в рекурсивный цикл, который завершится, когда браузер превысит свои возможности.Вы можете увидеть это, добавив предупреждение внутри if (window.parent && window.parent.setDirtyFlag)
:
if (window.parent && window.parent.setDirtyFlag) {
alert("again");
window.parent.setDirtyFlag(val);
}
Почему window.parent определяется, даже если страница не находится внутри iframe?И почему он содержит ссылку на функции в этом кадре?И самое главное, как заставить это работать?