如何通过javascript在两个不同的域之间进行通信
How to communicate between two different domains through javascript
我正在用javascript、ajax和signaler构建一个嵌入式聊天控件。用户可以通过添加一些javascript将其添加到他们的网站中,这些javascript会回调到我们的服务器并请求构建聊天小部件所需的javascript。聊天小部件随后嵌入到他们的网站上,但它可以弹出到一个新窗口中。新窗口来自我们的服务器,不再在他们的网站上。
任务:当用户关闭弹出窗口时,我需要重新显示嵌入的弹出窗口,并恢复正常聊天。
问题:弹出式聊天与嵌入式聊天(他们的网站)在不同的域(我们的网站)上。
我尝试过的:
1) 为打开弹出窗口的窗口提供重置功能。弹出窗口调用window.oopener.reset()的OnUnload(卸载)<---由于跨域安全问题,window.opener被拒绝访问。
2) 当弹出窗口时,启动一个循环来检查本地存储。弹出窗口的onUnload在浏览器本地存储中设置一个变量<----本地存储似乎也没有经过跨域。即使代码命中,我也看不到更改。
3) 与2)相同,但使用浏览器cookie<---与2)情况相同,它不跨域。
我必须使用的:
- 中央服务器和数据库
- 在他们的网站上运行的Javascript
- 在他们的网站上嵌入聊天,可以弹出在我们的网站上运行但继续相同聊天的聊天窗口会议
- 聊天会话可以在嵌入式聊天中启动窗口小部件或弹出窗口中,并且应该能够来回移动两者之间很容易
最好的解决方案可能是使用postMessage。
你要做的事情如下。让用户在他的页面上插入以下内容:
// open your popup chat
var popup = window.open(yourpopup);
popup.postMessage("init",
"https://tagetUrl.com");
function receiveMessage(event)
{
if (event.origin !== "http://YOURDOMAIN.org")
return;
// initialize your chat again
}
window.addEventListener("message", receiveMessage, false);
在弹出窗口中,你必须这样做:
source = null;
origin = null;
function receiveMessage(event)
{
source = event.source;
origin = event.origin;
}
window.addEventListener("message", receiveMessage, false);
当弹出窗口关闭(onUnload)时,您可以将消息发送回原始页面:
source.postMessage("closed", origin);
我希望我能帮上忙。
相关文章:
- firefox插件和dev/panel之间的通信
- 如何在两个不同的iframe HTML之间进行通信
- Angularjs事件与发布/订阅指令之间的通信
- Firefox插件SDK:在侧边栏和主脚本之间通信对象
- Ember.js:接受的子组件和父组件之间通信的最佳实践
- 如何在Windows Phone 8.1应用程序中在C#和Javascript之间传递数据或通信
- 如何在Famo.us中的两个视图(不同的js文件)之间进行通信
- 在Jquery或Javascript中获取两个范围或日期之间的通信周数
- 如何在同源选项卡之间建立通信
- 如何在 PHP 和 JS 中的并发会话之间进行通信
- 如何在两个动画画布元素之间进行通信
- 在 HTML5 和 C# Web 套接字通信之间
- angularjs 中控制器和指令之间的通信
- 歌剧扩展脚本和它们之间的通信
- 如何使用js在两个aspx页面之间进行通信
- 多个应用程序之间的通信
- Socket.IO:如何在同一服务器中的Socket.on()事件之间通信/交换数据
- chrome扩展的浏览器操作、后台脚本和内容脚本之间通信的上下文和方法
- 使用PhoneGap/Cordova时应用程序和服务器之间通信的最佳实践
- 使用AJAX在两个JavaScript文件之间通信并发送数据