Междоменная межкадровая связь в Opera - PullRequest
2 голосов
/ 12 февраля 2010

Мне необходимо установить связь между двумя iframes одного домена, которые находятся внутри родительской страницы в другом домене, который я не могу контролировать.

Это приложение для Facebook, и основной макет этого

apps.facebook.com / MyApp
L iframe1 (src = 'mysite.com / foo')
L iframe2 (src = 'mysite.com / bar')

Мне нужен frame1 для связи с frame2, но в Opera я не могу получить доступ к window.parent.frames ['frame2'] делать обычные междоменные методы (например, обновление location.hash)

Есть ли альтернативный способ сделать это в Opera?

Заранее спасибо за помощь

Ответы [ 3 ]

2 голосов
/ 23 февраля 2012

Вы пытались использовать HTML5 веб-сообщения . В настоящее время он довольно хорошо поддерживается в последних версиях браузеров.

iframe.contentWindow.postMessage('Your message','http://mysite.com');

Свойству postMessage потребуется источник http://mysite.com.

1 голос
/ 23 февраля 2012

Как уже говорили другие, используйте window.postMessage. Но вместо использования window.parent.frames['frame2'] попробуйте window.parent.frames[x], где x - это позиция в списке узлов другого iframe.

Вы можете увидеть пример этого по происхождению здесь: http://webinista.s3.amazonaws.com/postmessage

1 голос
/ 12 февраля 2010

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

Если родительский документ дал вашему фрейму, с которым нужно связаться, уникальный name, существует ограниченная форма связи, возможная с ним, когда пользователь нажимает на ссылку с href="otherurl#message" target="name", которая будет перемещаться по целевой кадр путем изменения хэша без перезагрузки страницы, если URL-адрес точно совпадает. В Mozilla вы также можете сделать это с помощью form target, что позволит вам написать сценарий его отправки (поскольку переход по ссылке не может быть автоматизирован), но не в Opera. Вероятно, не очень полезно ... не знаю, дает ли FB цель кадра name в любом случае.

Вы можете создать канал связи между сценариями в одном и том же домене, используя файлы cookie (*): один сценарий записывает файл cookie сеанса, другой сценарий запрашивает изменения в document.cookie, чтобы найти в нем сообщения. Но это очень уродливо и требует некоторой раздражающей работы для контроля сигнализации, для кого предназначены сообщения, когда одновременно открыто несколько документов. Существуют и другие ограничения для файлов cookie в сторонних фреймах (вам, вероятно, потребуется написать политику P3P, чтобы заставить IE взаимодействовать).

(*: или, предположительно, веб-хранилище HTML5, если оно доступно.)

...