Document.domain и <iframe>s ломает кнопку «Назад» в Internet Explorer - PullRequest
4 голосов
/ 23 декабря 2009

Это очень насущная проблема, и я всегда был бы в долгу перед каждым, кто может дать некоторое представление.

Я собираюсь развернуть виджет (называемый «ISM») на стороннем сайте. Этот сайт использует свойство JavaScript document.domain для ослабления междоменных ограничений (например, установив document.domain в "a.example.com" и "b.example.com" для обоих "example.com", чтобы они могли получить доступ к каждому DOMs других).

Это вызывает проблемы с моим сценарием в Internet Explorer из-за способа, которым я создаю

Чтобы увидеть, о чем я говорю, загрузите эту страницу в IE:

http://troy.onespot.com/static/3263/stage1.html

Вы должны увидеть ошибку JavaScript: «Доступ запрещен».

Чтобы обойти это, я устанавливаю динамически созданный атрибут

http://troy.onespot.com/static/3263/stage2.html

Это решает проблему безопасности и позволяет мне написать документ, который я изначально хотел записать в

http://troy.onespot.com/static/3263/stage3.html

С этим документом мой виджет выполняет опрос нашего сервера, чтобы получить HTML-контент, который я хочу вставить в другой

http://troy.onespot.com/static/3263/stage4.html

Здесь возникает проблема. Когда я получаю этот HTML-контент и вставляю его во вторую

http://troy.onespot.com/static/3263/stage5.html

Если вы нажмете ссылку "Google", все будет в порядке. Но при переходе на предыдущую страницу (на которой есть последний тестовый скрипт) появляется другая ошибка JavaScript: «Отказано в доступе». Это не прекращает работу сценария и не оказывает какого-либо вредного воздействия, за исключением того факта, что я предполагаю, что он связан с нарушенной функциональностью кнопки «Назад», что является очень большой проблемой - той, которую я отчаянно пытаюсь решать. Я затрудняюсь отладить эту ошибку, поскольку ее стек вызовов запускается и останавливается в сценарии jQuery.

Вы также можете столкнуться с этой ошибкой - с более серьезными симптомами - перейдя по последней ссылке выше (stage5.html - сначала очистите кеш браузера). Нажмите ссылку «Этап 5 (снова)», затем, после загрузки этой страницы, нажмите кнопку «Назад».

Кнопка «Назад» полностью сломана! Вы не можете перейти никуда, кроме как на другой URL.

Это проблема, которую мне нужно решить как можно скорее. Любые идеи или помощь будут чрезвычайно оценены!

Я не могу слишком сильно отклоняться от этого метода, поэтому внушительные предложения определенно приветствуются, но я не могу их использовать из-за ограничений спецификаций виджета. Я бы предпочел понять, почему кнопка «Назад» не работает и как ее исправить, а также ошибку «Отказано в доступе», связанный с jQuery.

Ответы [ 2 ]

3 голосов
/ 23 декабря 2009

Очень сложно попробовать исправления для этого из-за нескольких доменов. Одна вещь, которую я слышал, заключается в том, что IE рассматривает пустой src или «about: blank» как другой домен, но обрабатывает «javascript:» »как тот же домен. Экспериментировали ли вы с изменением первого этапа, чтобы установить в iframe src такие вещи, как:

iframe.src = 'javascript:""'

Или:

iframe.src = 'javascript:parent.getFrameHTML()'
1 голос
/ 23 декабря 2009

Частично проблема заключается в том, что IE (по крайней мере, IE 7) добавляет две записи в историю с именем «Domain», когда я нажимаю на ссылку «Stage 5 Again». Когда вы используете маленькую стрелку раскрывающегося списка рядом с кнопкой «Назад», вы увидите историю страниц, позволяющую сделать шаг назад более чем на один шаг. Я вижу, что предыдущие две записи перечислены как «Домен», и нажатие на любую из них приводит меня на ту же страницу. Четвертое место (после текущей страницы, домена, домена) - это правильная ссылка «Кнопка возврата ISM» на исходную страницу stage5.html.

Так что проблема не совсем в том, что кнопка «назад» не работает, а просто в том, что записи в истории добавляются, и поэтому кнопка «назад» переносит вас в неправильное место. У меня нет ответа на вопрос, почему эти «доменные» записи добавляются в историю, но, надеюсь, это поможет вам указать полезное направление.

Удачи!

...