Исторически, любое окно могло изменить местоположение любого другого окна. Это оказалось проблемой, потому что, среди прочего, это означало, что встраивание логара iframe в окно было небезопасным (потому что тогда злонамеренный сайт мог заменить логин iframe поддельной версией). Со временем были применены дополнительные ограничения к изменениям местоположения в окнах браузера до тех пор, пока HTML5 и большинство браузеров не достигли общего соглашения по политике предков . В двух словах, перефразируя спецификацию HTML5, окно A может изменить местоположение другого окна B, если:
- местоположения A и B имеют одинаковое происхождение, то есть они имеют одинаковую схему, хост и порт (например, http, stackoverflow.com, 80) или
- B - это окно верхнего уровня, а A - это окно во фрейме, вложенном на некоторой глубине в B (прямой потомок, потомок дочернего элемента и т. Д.), Или
- B - это окно, открытое с использованием
window.open
, и A может изменить местоположение окна, открывшего B (таким образом, B - это всплывающее окно, открытое с помощью A, с помощью всплывающего окна, открываемого с помощью A, или с большей глубиной), или
- B не является окном верхнего уровня, но его родительским окном или родительским окном его родителя, или при некотором аналогичном происхождении местоположения этого окна и A имеют одинаковое происхождение
(То же происхождение сложнее, чем это, но приведенное выше описание улавливает его сущность и охватывает наиболее распространенные случаи.)
В соответствии с этой политикой C может изменить местоположение A, а A может изменить местоположение B или C, но C не может изменить местоположение B. Если вам нужно обойти это, вам следует изменить свою страницу Местоположение A к чему-то, что изменяет B соответственно; поочередно, вы можете попросить вашу страницу B изменить свое местоположение .
Надеюсь, это информативно, если не обязательно полезно. Модель безопасности браузера была не столько разработана , сколько эволюционировала , и только с недавней работой в HTML5 она действительно была точно зафиксирована для устранения этих кросс-браузерных несоответствий.
Все это говорит о том, что я удивлен тем, что IE7 и IE8 работают на вас - это было мое понимание, что вышеупомянутая политика была основана главным образом на политике, реализованной в IE7.