是否有方法在javascript中的多个网页之间进行客户端进程间的通信?理想情况下,我希望在没有任何复杂的服务器状态更新、like等情况下完成这一任务,并使其仅在客户端上工作。如果我也能做这个跨浏览器,我会在天堂哈哈。有什么想法吗?谢谢!
发布于 2016-02-11 19:31:34
有很多种方法可以进行窗口间的通信。它们是Window.postMessage、本地存储、WebRTC和当今共享的网络工作人员。
其中每一个都有各自的优点/缺点:
在两个独立的网站之间进行跨原点的交流真的很笨拙。您必须从第一个网站执行window.open()并使用postMessage与第二个网站进行通信,或者您必须设置这个复杂的体系结构,在每个站点上使用隐藏的iframes与托管在同一个网站地址上的web页面对话,然后这些iframes通过本地存储或共享工作人员彼此交谈。这就是所谓的“通讯枢纽”。(相当复杂,对吧?)
更糟糕的是,页面间通信一直被视为一个安全漏洞,而且几乎被回避。如果有些人有自己的方式,我想跨源postMessage会被移除。我希望看到的是一些协议增强和一些类似oAuth的技术的创建,这样我们就可以保护该技术并使其合理。未来将会有大量的数据移动到客户端,并且在网页之间共享数据将变得非常重要。
尽管如此,别再制造轮子了。有几个库使窗口间通信成为可能。
发布于 2013-10-14 02:13:13
尝试一下讯息撰写人的这段代码
function sendMessage(name, value) {
var expires = "";
document.cookie = name + "=" + value + expires + "; path=/";
}
sendMessage("test", "hello world!")打开第二个窗口,然后消息侦听器
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上。
https://stackoverflow.com/questions/19352279
复制相似问题