Что именно может IFrame делать с top.Location object (cross-domain)?
В междоменных политиках существует очень конкретный аргумент в отношении объекта window.top.Location...
Скажем, у меня есть IFrame A, в домене www.bbb.com, живущий внутри страницы в домене www.aaa.com.
Страница внутри IFrame может:
- Сравните window.top.location с окном .location(чтобы определить, будет ли он обрамлен)
- Вызов window.top.location.replace(window.location) для перенаправления на self
- Вызовите window.top.location.replace( "любая произвольная строка" ) для перенаправления в другое место
Но он не может:
- Alert, Document.Write или любой вид вывода window.top.location.href
- Объединить его в любую другую переменную или использовать ее любым полезным способом.
- Вызов window.top.location.reload()
Это именно те, которые я могу быстро найти. Я уверен, что есть другие крайние случаи.
Похоже, что браузер не позволяет использовать объект top.location, если вершина находится в другом домене, кроме для нескольких белых элементов...
Является ли это документированным где угодно?
Могу ли я узнать, что это за белые вещи?
Это в стандарте HTML и реализовано одинаково во всех браузерах? Или это реализация этого полуслучайного?
Ответы
Ответ 1
Правила безопасности отличаются от версии браузера. Обычно более новые версии имеют более строгие правила, но также более точно настроены.
Я подозреваю, что старые браузеры свободно позволят вам получить доступ к объекту местоположения верхнего фрейма, немного более новые браузеры полностью его отрицают, а текущие версии позволяют сравнивать объекты местоположения, но не читать их.
Возможно, вам удастся найти документацию об этом, но она будет конкретной для каждого браузера и конкретной для каждой версии браузера. Насколько я знаю, для этого нет реального стандарта. Каждый поставщик браузера пытается защитить пользователя как можно больше, сохраняя при этом некоторую удобство для создания веб-сайта. Как правило, вы не можете предположить, что что-то близко к границе работает во всех браузерах или что оно будет продолжать работать в будущих версиях.
Ответ 2
Это точно указано в стандарте HTML5 в разделе 5.5.3.1.