Этот вопрос ранее задавался и отвечал правильно, но, похоже, не было опубликовано решение.
Если на сайте есть фреймы, и кто-то хочет предотвратить их закрытиев кадре из другого домена упрощенная очистка кадров не будет полезна:
<script>if (top != self) top.location = location</script>
Однако, поскольку межкадровый сценарий для других доменов должен генерировать исключения, что-то вроде этого хорошо работает внутри iframe:
<script>
try {
if (window.document.domain != top.document.domain) { // throws exception
throw "You naughty puppy!"; // Should not ever get here, right?
}
}
catch () {
top.location = "/error/naughtypuppy";
}
</script>
Выше if
должно быть достаточно для предотвращения междоменной компоновки фреймов.Он должен только когда-либо возвращать false
или выдавать исключение, так что есть ли сценарий, который может достичь оператора throw
в браузере?
Будет ли этого достаточно, чтобы предотвратить создание кадров только из других доменов?*
<script>
try {
var bogus = top.document.domain;
}
catch () {
top.location = "/error/naughtypuppy";
}
</script>
Редактировать: здесь намекают на подобное решение, но нельзя полагаться на родительский фрейм для включения кода перебора фреймов. Определить, когда iframe является междоменным, а затем удалить его .По сути то же решение, что и «попытаться получить доступ к другому фрейму и перебрать, если возникнет исключение».