Проблема с междоменными фреймами в IE8: изменение parent.location приводит к появлению нового всплывающего окна. если в событии клика, он работает так, как ожидалось

У меня много проблем с работой междоменной связи iframe.

Он работает в Firefox и Chrome, но в Internet Explorer работает только некоторыми способами:

Если parent.location = 'new_hash'; не охватывается событием onClick, родительский фрейм заставляет открыть новое всплывающее окно. Если это событие onClick, работает трюк с идентификатором междоменного фрагмента. Что дает?

Похоже, мне нужно понять javascript..


Изменить в комментарии: parent.location.href и parent.location ведут себя одинаково.

Кажется, мой конкретный браузер IE 8.0.7600.16385 читает изменение хеша как всплывающее окно. Я хотел бы услышать, если кто-нибудь еще испытал что-то подобное.

Создает всплывающее окно в родительском:

<script type="text/javascript">
parent.location = 'http://example.com#new_hash';
</script>

показывает диалоговое окно «всплывающее окно заблокировано» в IE8. Если я позволю всплывающим окнам открываться, они будут открывать всплывающие окна бесконечно.

Не создает всплывающее окно в родительском:

<a onClick="parent.location='http://example.com#new_hash'">clicky</a>

or

$(function() { 
 $("mybutton").click( function() { 
   parent.location='http://example.com#new_hash';
});

Не создает всплывающее окно в родительском.

Мой реальный пример

Моему нужно, чтобы parent.location=newhash срабатывал, когда его собственный хеш имеет определенное значение. У меня по сути есть:

setInterval(function() { 
 if (location.hash == 'something')
    {
      parent.location='http://example.com#new_hash';
    }  
}, 500);

Что происходит? Как я могу решить эту проблему? Почему это работает, когда оно привязано к событию щелчка, но не работает, если оператор выполняется сам по себе? Конкретный пример, над которым я работаю, находится по адресу http://www.grovemade.com/products/test в версии 04

Я активно возился здесь, так что это может устареть ..

В Firefox и Chrome родительский фрейм изменяется с "без хэша" на "#xdm-success" и "#handshake-complete".

В IE8 #xdm-success принудительно открывает новую страницу.

Спасибо!


person Yuji 'Tomita' Tomita    schedule 08.07.2010    source источник
comment
Я проверил ваш пример в домене, который вы указали, но у меня не было всплывающих окон в IE8 или IE7. Он работает так же, как Firefox и Chrome, за исключением того, что фон в IE белый.   -  person rob waminal    schedule 08.07.2010
comment
Ох! Интересный. Интересно, что случилось!? Это известная проблема на некоторых IE8? 8.0.7600.16385 Интересно, что мне делать... если на некоторых IE8 сайт будет бесконечно создавать всплывающие окна, то есть... очень плохая пресса. Люди потрескаются.   -  person Yuji 'Tomita' Tomita    schedule 08.07.2010
comment
Я испытываю то же самое, но это происходит только для меня, когда родительское окно https.   -  person Jason Rice    schedule 05.07.2011


Ответы (2)


Разве вы не должны установить parent.location.href вместо parent.location? Я не знал, что последний вообще работает...

person Dagg Nabbit    schedule 08.07.2010
comment
Привет, спасибо за комментарий. К сожалению, это не имеет значения. Поведение одинаково в IE, Chrome и Firefox. Я протестировал базу, простой пример: iframe с ‹script›parent.location.href‹/script› Если он находится в событии клика, он работает, как и ожидалось. Если нет, он создает всплывающие окна.. : ( - person Yuji 'Tomita' Tomita; 08.07.2010
comment
Вот некоторые другие вещи, которые вы можете попробовать... установить хеш напрямую: parent.location.hash='new_hash'; или использовать location.replace: parent.location.replace('http://example.com#new_hash') - person Dagg Nabbit; 08.07.2010
comment
Спасибо за помощь! Установка parent.location.hash дала бы мне отказ в разрешении на междоменные проблемы. parent.location.replace дает мне ту же проблему с всплывающими окнами. Похоже, что это уникально для моего браузера. Я попробовал другой IE8, который отлично работает. Теперь мне нужно отследить, как часто это происходит в разных IE8. - person Yuji 'Tomita' Tomita; 08.07.2010
comment
^ Радости javascript и Internet Explorer - person Christopher Tarquini; 08.07.2010
comment
Ах, это междоменное? Вероятно, в этом проблема. Это происходит, когда это не междоменный? Это происходит в IE9? Если (1: нет, 2: да), то, вероятно, это сделано специально для предотвращения попыток XSS. Возможно, это один из миллионов параметров безопасности IE? - person Dagg Nabbit; 08.07.2010
comment
Да, это междоменный домен. НО, кросс-домены работают, ЕСЛИ это происходит в событии onClick ‹a onClick› или jquery Click. Вот почему я наполовину в тупике, наполовину ОЧЕНЬ любопытно, как эти штуки работают. Я бы хотел, чтобы это было хотя бы /fail/ вместо того, чтобы создавать бесконечную серию всплывающих окон для пользователя, как будто мы старый спам-сайт. -- Сейчас прохожу настройки безопасности. - person Yuji 'Tomita' Tomita; 08.07.2010
comment
Я попытаюсь смоделировать событие клика, так как там он работает! дааа, у меня большие надежды. - person Yuji 'Tomita' Tomita; 08.07.2010
comment
Не работает. document.getElementById('test').click(); генерирует всплывающее окно для родителя. На самом деле нажатие на кнопку автоматически обновляет хэш. Идентификация проблемы, кажется, там. В чем разница между функцией X, вызываемой событием щелчка, в отличие от начального синтаксического анализа? Я рад, что вижу свет — пока он работает во время события щелчка, я, вероятно, могу обойти это и передать идентификатор сеанса iframe родителю. - person Yuji 'Tomita' Tomita; 08.07.2010

Я думаю, что для устаревших браузеров вы можете просто загрузить другой iframe внутри iframe и использовать файл cookie для получения хэша.

person gaby de wilde    schedule 02.04.2011