首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WWW中的页面间通信?

WWW中的页面间通信?
EN

Stack Overflow用户
提问于 2013-10-14 01:31:29
回答 2查看 3K关注 0票数 2

是否有方法在javascript中的多个网页之间进行客户端进程间的通信?理想情况下,我希望在没有任何复杂的服务器状态更新、like等情况下完成这一任务,并使其仅在客户端上工作。如果我也能做这个跨浏览器,我会在天堂哈哈。有什么想法吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-11 19:31:34

有很多种方法可以进行窗口间的通信。它们是Window.postMessage、本地存储、WebRTC和当今共享的网络工作人员。

其中每一个都有各自的优点/缺点:

  • 本地存储仅适用于相同来源的页面(原产地是协议://网站:端口)。它还将消息广播到同一来源的每一个打开的窗口,因此如果您打开了大量页面,它会很慢)不幸的是,这是IE11和更低版本支持的唯一跨窗口技术。
  • 共享工作程序只支持Chrome和Firefox (也只支持相同的来源,并且worker.js文件必须从相同的来源加载)。您还必须“中继”通信流量从一页到另一页。
  • Window.postMessage只在父/子窗口之间工作,但它支持跨源!

在两个独立的网站之间进行跨原点的交流真的很笨拙。您必须从第一个网站执行window.open()并使用postMessage与第二个网站进行通信,或者您必须设置这个复杂的体系结构,在每个站点上使用隐藏的iframes与托管在同一个网站地址上的web页面对话,然后这些iframes通过本地存储或共享工作人员彼此交谈。这就是所谓的“通讯枢纽”。(相当复杂,对吧?)

更糟糕的是,页面间通信一直被视为一个安全漏洞,而且几乎被回避。如果有些人有自己的方式,我想跨源postMessage会被移除。我希望看到的是一些协议增强和一些类似oAuth的技术的创建,这样我们就可以保护该技术并使其合理。未来将会有大量的数据移动到客户端,并且在网页之间共享数据将变得非常重要。

尽管如此,别再制造轮子了。有几个库使窗口间通信成为可能。

  • Endpoint.js --我开发了一个库(免责声明),它可以中介windows (多源)、制表符、web工作者、客户机/服务器以及进程间的IPC之间的通信。它还创建了一个临时覆盖网络,允许所有这些技术相互传递信息。
  • 交叉表 --实现了上面的“通信中心”方法。
  • 臭氧-iwc -来自OZone Widget的IPC框架。启用本地存储和PostMessage
票数 7
EN

Stack Overflow用户

发布于 2013-10-14 02:13:13

尝试一下讯息撰写人的这段代码

代码语言:javascript
复制
function sendMessage(name, value) {
    var expires = "";
    document.cookie = name + "=" + value + expires + "; path=/";
}

sendMessage("test", "hello world!")

打开第二个窗口,然后消息侦听器

代码语言:javascript
复制
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上。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19352279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档