У меня есть окно, содержащее iframe, содержащее iframe, вот так:
+---------------+
| Top |
| +-----------+ |
| | Middle | |
| | +-------+ | |
| | | Inner | | |
| | +-------+ | |
| +-----------+ |
+---------------+
Верх и середина находятся в одном домене, но Inner находится в другом домене. Мне нужен Иннер, чтобы общаться с Топом. Единственный известный мне способ сделать это, который поддерживается в IE7 (который мне нужно поддерживать), - это изменить хэш расположения окна. Тем не менее, я не хочу, чтобы информация мерцала в строке адресации, поэтому я ввел средний iframe.
Я хочу, чтобы Иннер изменил хэш Мидл. Middle прочитает свой хеш и сообщит Top, с кем у него есть разрешение на прямой разговор.
Однако , в Firefox 3 я не смог записать в хэш Мидл из Inner. Ошибка не возникает, но хэш отображается без изменений. Запись в location.href
вызывает ошибку прав доступа.
Однако Top может записывать в хэш Middle, а Middle может записывать в хэш Inner, Top может записывать в хэш Inner, а Inner и Middle могут записывать в хэш Top, поэтому только упорядоченная пара это не работает, это то, что я хочу! (Я работал над этим некоторое время.)
Я воспроизвел это в минимальном тестовом примере. Сначала я обслуживал все три страницы из одного домена. Когда я помещаю Inner в другой домен, я получаю проблемное поведение. Когда я ставлю Middle на второй домен, каждый может снова написать каждому.
Почему Иннер не может писать в хэш Мидл?
Приложение : Многие люди полагают, что это невозможно из-за политики одного происхождения. Это именно та политика, которую я пытаюсь обойти. Именно этот случай - установка (но не чтение) местоположения другого окна - должна быть возможной в разных доменах. Я не нашел браузерную документацию на этот счет, но я нашел много статей и демонстраций. По сути, это предшественник HTML 5 postMessage()
.
Ссылка: http://softwareas.com/cross-domain-communication-with-iframes