реализовать обратный вызов между двумя сайтами - общение между двумя сайтами - PullRequest
3 голосов
/ 03 января 2011

У меня есть веб-приложение в http://domain1/app1/called.html,, и я хочу встроить это приложение в http://domain2/app2/caller.html с помощью iframe (или всплывающего окна, то же самое)

, пользователь долженбыть в состоянии взаимодействовать с named.html до тех пор, пока они не нажмут определенную кнопку, в этом случае мне нужно сообщить caller.html, что пользователь выбрал элемент из named.html

Я пытался реализовать его с помощью javascript.

в named.html Я кодирую данные в json, а затем я выполняю функцию javascript «named_callback» в caller.html, передавая json в качестве параметра.

, если был вызван call.htmlс помощью всплывающего окна я выдаю window.opener.called_callback (jsonData), если это iframe, я просто выдаю parent.called_callback (jsonData)

с caller.html и named.html в одном домене, все работает нормальноно из разных доменов я получаю следующие ошибки:

permission denied (on IE6)

и

Unsafe JavaScript attempt to access frame with URL [..]/caller.html from frame with URL [...]called.html. Domains, protocols and ports must match. (on google chrome)

Можно ли преодолеть это ограничение?

Какой другой способ достижения этого можетты думаешь оf ???

Я полагаю, что caller.html мог бы реализовать веб-сервис, и я мог бы отправить результат, вызывая его, но странице caller.html пришлось бы опрашивать, чтобы обнаружить любое изменение ...

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

Ответы [ 4 ]

4 голосов
/ 04 января 2011

Вы можете использовать JSONP для вызова ресурсов из одного домена в другой.

Вы можете использовать window.name в качестве передачи текста ~ 2Mb между фреймами между доменами для более старого браузера.

Или для современного браузера вы можете использовать window.postMessage для передачи строковых данных между 2 кадрами.

Но для работы этих методов требуется сотрудничество со стороны доменов.

1 голос
/ 04 января 2011

Благодаря обоим ответам я нашел следующее:

http://benalman.com/code/projects/jquery-postmessage/docs/files/jquery-ba-postmessage-js.html

http://benalman.com/projects/jquery-postmessage-plugin/

jQuery postMessage позволяет просто и легкое общение в браузерах, которые его поддерживают (FF3, Safari 4, IE8), возвращаясь к связь document.location.hash метод для всех других браузеров (IE6, IE7, Opera).

С добавлением метод window.postMessage, JavaScript наконец, есть фантастическое средство для междоменная фреймовая связь. К сожалению, этот метод не поддерживается во всех браузерах. Один пример где этот плагин полезен, когда ребенок Iframe должен сказать своему родителю что его содержание изменилось.

Я посмотрю на это ...

1 голос
/ 04 января 2011

Вы должны использовать JSONP .Он полностью поддерживается в jQuery , если вы используете именно эту платформу.Позволяет использовать JSON для разных доменов.

0 голосов
/ 04 января 2011

Вот очень полный документ, который анализирует различные подходы ...

http://softwareas.com/cross-domain-communication-with-iframes

еще одно решение, чтобы взглянуть на

http://easyxdm.net/

с выборкой

http://easyxdm.net/wp/2010/03/17/setting-up-your-first-socket/

...