javascript - 如何通过javascript在两个不同域之间进行通信

标签 javascript ajax popup cross-domain

我正在使用 javascript、ajax 和 signalr 构建嵌入式聊天控件。用户可以通过添加一些 JavaScript 来将其添加到他们的网站中,这些 JavaScript 回调我们的服务器并请求构建聊天小部件所需的 JavaScript。然后,聊天小部件会嵌入到他们的网站上,但它可以弹出到新窗口中。新窗口来 self 们的服务器,不再位于他们的网站上。

任务: 当用户关闭弹出窗口时,我需要重新显示嵌入的弹出窗口并正常恢复聊天。

问题: 弹出聊天位于与嵌入式聊天(他们的网站)不同的域(我们的网站)上。

我尝试过的:

1) 给打开弹出窗口的窗口一个重置的功能。弹出窗口的OnUnload调用window.opener.reset()<---window.opener由于跨域安全问题被拒绝访问。

2) 弹出窗口时,启动循环检查本地存储。弹出窗口的 onUnload 在浏览器本地存储中设置一个变量。 <---- localstorage好像也没有跨域。即使代码命中,我也看不到变化。

3) 与 2) 相同,但使用浏览器 cookie <--- 与 2) 的情况相同,它不会跨域。

我必须处理的事情:

  • 中央服务器和数据库。
  • 在他们的网站上运行 JavaScript。
  • 其网站上的嵌入式聊天可以弹出 在我们网站上运行但继续相同聊天的聊天窗口 session 。
  • 聊天 session 可以在嵌入式聊天中启动 小部件或弹出窗口中,应该能够来回 两者之间很容易。

最佳答案

最好的解决方案可能是使用 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);

在您的 PopUp 中,您必须执行以下操作:

source = null;
origin = null;
function receiveMessage(event)
{
  source = event.source;
  origin = event.origin;
}
window.addEventListener("message", receiveMessage, false);

当 PopUp 关闭( onUnload )时,您可以将消息发送回原始页面:

source.postMessage("closed", origin);

希望能帮到你。

关于javascript - 如何通过javascript在两个不同域之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640495/

相关文章:

c++ - 通过循环创建弹出菜单 w.r.t 到参数时的问题

javascript - 通过函数继承?

javascript - 使用 javascript POST 方法查询大查询表

javascript - 将数据从 PHP 传递到 angular.js

php - 如何从 mysql 表字段格式中选择不同的年月值 2013-01-01

javascript - Rails - 将 ajax 添加到部分, 'undefined method ` 渲染''

php - 防止 AJAX 调用每次触发两次

javascript - 使用 Struts 将外部 URL 作为弹出窗口

javascript - img.on ("load") 在加载 img 之后但在设置其大小之前执行 (IE)

c# - Javascript确认消息问题