有没有办法在javascript中的多个网页之间进行客户端进程间通信?理想情况下,我希望在没有任何复杂的服务器状态更新,ping等的情况下完成此操作,并使其仅在客户端上运行。如果我也可以制作这种跨浏览器,我会在天堂哈哈。有任何想法吗?谢谢!
答案 0 :(得分:7)
进行窗口间通信的方法有很多种。它们是Window.postMessage,本地存储,WebRTC,以及现在的共享Web工作者。
每一项都有各自的优点/缺点:
在两个独立网站之间进行跨域通信非常笨拙。您必须从第一个网站执行window.open()并使用postMessage与第二个网站进行通信,或者您必须设置这个复杂的体系结构,您可以在每个网站上使用隐藏的iframe与托管的网页进行通信在相同的网站地址上,这些iframe然后通过本地存储或共享工作者相互通信。这被称为“通信枢纽”。 (很复杂,对吗?)
更糟糕的是,页面间通信被视为一个安全漏洞而且几乎被避开了。如果有些人有他们的方式,我想象将删除跨源postMessage。我希望看到的是一些协议增强功能和一些类似oAuth的技术,因此我们可以保证技术的合理性。将来会有很多数据移动到客户端,并且在网页之间共享它将变得至关重要。
那就是说,不要重新制造车轮。有几个库可以使窗口间通信成为可能。
答案 1 :(得分:2)
尝试使用message writer
的代码function sendMessage(name, value) {
var expires = "";
document.cookie = name + "=" + value + expires + "; path=/";
}
sendMessage("test", "hello world!")
打开第二个窗口并try this message listener
function getMessage(c_name) {
if (document.cookie.length > 0) {
c_start = document.cookie.indexOf(c_name + "=");
if (c_start != -1) {
c_start = c_start + c_name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) {
c_end = document.cookie.length;
}
return unescape(document.cookie.substring(c_start, c_end));
}
}
return "";
}
function check() {
var message = getMessage('test');
var element = document.getElementById('output');
element.innerHTML = message;
}
window.setInterval(check, 1000);
在Chrome上正常运行,你也应该确保它在其他主流浏览器中运行,特别是在IE上