window.parent.location.href Ошибка IE9? - PullRequest
0 голосов
/ 13 июля 2011

Сценарий:

  1. domain1.com содержит iFrame domain2.com.

  2. domain2.com использует javascript для запуска динамических ссылоккоторые необходимо направить в родительское окно.

  3. Все ссылки являются относительными путями.

  4. Нажатие на /linkA.html (в iframe наdomain2.com) направляет родительский домен на domain1.com/linkA.html.

    var _generic = "/linkA.html";

        $("#canvas").each( function () {
            $(this).children("a").attr("href",_generic);
            $(this).click( function(e) {
                e.preventDefault();
                window.parent.location.href = _generic;
            } );
        } );
    

Изменение ссылок на абсолютные (domain2.com/linkA.html) решает функциональную проблему.

Кто-нибудь сталкивался с этим раньше?

Ответы [ 3 ]

1 голос
/ 13 июля 2011

Вы должны попробовать использовать window.opener.location вместо window.parent.location.

1 голос
/ 13 июля 2011

Чтобы браузер разрешал весь URL при задании относительных путей, он сначала должен прочитать текущий href, и это блокируется SOP.

Но я вполне уверен, что если вы используетеparent.location вместо parent.location.href, тогда это будет прекрасно работать.

0 голосов
/ 12 ноября 2012

Я видел разницу в IE9 по сравнению с IE8, FireFox и Webkit.Рассмотрим следующий код:

Родительский источник:

<!DOCTYPE html>
<html>
<head><title>iframe test page</title></head>
<body>
    <h1>Parent window</h1>
    <iframe src="//domain2/iframe.html"></iframe>
</body>
</html>

Источник iframe (в отдельном домене):

<!DOCTYPE html>
<html>
<head><title>iframe content</title></head>
<body>
    <h1>iframe content</h1>
    <script>function redirect() { window.parent.location = "/new-href"; } </script>
    <a href="javascript:redirect()">Redirect the parent window please</a>
</body>
</html>

Если главная страница открыта в IE8 (илиЕсли IE9 настроен на работу в режиме IE8 или Chrome 23 или FF16), щелкнув ссылку, можно перейти к // (домен iframe) / new-href, тогда как в IE9 он перейдет к // (исходный родительский домен) / new-href

Я все еще изучаю, как обойти эту проблему, и обновлю ее, если / когда у меня будет больше информации.

ОБНОВЛЕНИЕ: Установка атрибута target = "_ top" для ссылок iframe работает вокруг этогопроблема.

Обновленный источник iframe (в отдельном домене):

<!DOCTYPE html>
<html>
<head><title>iframe content</title></head>
<body>
    <h1>iframe content</h1>
    <a href="/new-href" target="_top">Redirect the parent window please</a>
</body>
</html>

При нажатии ссылки в этом обновленном коде iframe родительское (полное) окно будет перенаправлено на // (iframe)domain) / new-href как в IE8, так и в IE9 (и, насколько мне известно, также во всех браузерах).Это то, что вы хотите сделать, верно?

Например, если вы хотите, чтобы все теги в iframe заставляли верхнее / главное / родительское окно перемещаться куда-то, а не в iframe, то используйте что-то вроде этого:

$("iframe a").attr("target", "_top");

См.также документация целевого атрибута

...