Я недавно исследовал код взлома фреймов кода и натолкнулся на какое-то странное поведение, связанное с политикой того же происхождения , которое мне трудно понять.
Предположим, у меня есть страница Breaker.html в домене A и страница Container.html в домене B. Пример кода разрыва фрейма будет идти в Breaker.html, как показано ниже:
if (top !== self) top.location.href = self.location.href;
Это успешно вырвет Breaker.html из Container.html, но я не понимаю, почему это так. Из моего прочтения той же политики происхождения, top.location
не должен быть доступен вообще , так как Container.html находится в другом домене, чем Breaker.html. Еще более странно, что top.location только для записи :
// Fails if Container.html is on a different domain than Breaker.html
alert(top.location);
Это проблематично для меня, потому что я пытаюсь написать код, который позволяет моей странице находиться в iframe, но только если она находится в том же домене, что и его родитель (или в настроенном допустимом домене). Тем не менее, кажется, что это невозможно определить, поскольку та же политика происхождения запрещает мне доступ к местоположению родителя.
Итак, у меня есть два вопроса, в основном:
Почему вышеуказанный код прерывателя кадра работает вообще?
Есть ли способ условно разбить кадры, или единственная проверка, которую можно сделать, это top !== self
? (В частности, я хочу иметь возможность читать домен, чтобы я мог предоставить список допустимых доменов; просто проверка того, нахожусь ли я в одном домене или нет, не будет идеальной.)