当前位置: 首页 > 知识库问答 >
问题:

WWW中的页间通信?

姚俊材
2023-03-14

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

共有2个答案

皇甫树
2023-03-14

请尝试为邮件编写器编写此代码

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上

叶建柏
2023-03-14

窗口间的沟通有很多种方式。它们是Window.PostMessage、本地存储、WebRTC以及现在的共享Web Workers。

每种方法都有各自的优点/缺点:

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

在两个独立的网站之间做跨源通信真的很笨拙。您要么必须从第一个网站执行window.open()并使用postMessage与第二个网站通信,要么必须设置这个复杂的体系结构,在其中,您使用每个站点上的隐藏IFRAME与托管在相同网站地址上的web页面进行通信,然后这些IFRAME通过本地存储或共享工作者彼此通信。这被称为“通信枢纽”。(相当复杂,对吧?)

更糟糕的是,页面间通信被视为一个安全漏洞,几乎被避开。如果有些人有他们的方式,我想跨起源的邮件将被删除。我希望看到的是一些协议增强和一些类似OAuth的技术,这样我们就可以保护该技术并使其合理。未来将有大量的数据移动到客户端,在Web页面之间共享这些数据将变得至关重要。

这就是说,不要重新制造轮子。有几个库使窗口间通信成为可能。

  • Endpoint.js-我开发的一个库(免责声明),用于中介windows(在多个源上)、选项卡、web工作者、客户机/服务器以及进程之间的IPC之间的通信。它还创建了一个ad-hoc覆盖网络,允许所有这些技术相互中继信息。
  • 交叉表-实现上面的“通信集线器”方法。
  • OZP-IWC-OZone Widget framework中的IPC framework。启用本地存储和发布消息
 类似资料:
  • 有时需要让扩展中的多个页面之间,或者不同扩展的多个页面之间相互传输数据,以获得彼此的状态。比如音乐播放器扩展,当用户鼠标点击popup页面中的音乐列表时,popup页面应该将用户这个指令告知后台页面,之后后台页面开始播放相应的音乐。 Chrome提供了4个有关扩展页面间相互通信的接口,分别是runtime.sendMessage、runtime.onMessage、runtime.connect和

  • 我有这个在我的. htaccess文件: 但是每当我访问根目录上的文件时,就像它将重定向到。 我如何纠正它,以便它将正确地重定向到?

  • 页面A通过push参数到页面B进行通信 页面A通过千牛存储数据并在B页面获取 用户可以在A页面QN.localstore存储数据,并在页面B取得数据 如果希望A页面的数据,能在B页面使用,可以在A页面使用如下代码设置数据,这里用到了JSSDK的本地存储接口。 QN.localstore.set({ query: { key: 'myData', value:

  • 实现从书本中间翻页,页面翻动的过程可以随着手指的移动而翻动。用了UIPageViewController。这种效果如果放在iPhone设备上,由于屏幕分成两半,效果不是很好。但是如果用在iPad上,效果会好很多,和真正的书本阅读效果更接近。 [Code4App.com]

  • 问题内容: Java相互依赖的线程如何通信? 例如,我正在使用需要来自其他线程的数据的线程构建Web搜寻器。 问题答案: 这取决于通信的性质。 它是双工的吗(即A与B对话,B与A对话)? 是数据通信还是 完成 通信? 等等。 线程间通信的最简单,最可取的形式就是等待其他线程的完成。使用以下命令最容易做到: 在第一个任务完成之前,第二个任务将不会执行。 Java 5+具有 许多 并发实用程序来处理这

  • 问题内容: 我试图弄清楚如何通过使用Android应用程序在网页上显示实时数据。 例如,用户正在使用android应用并获得评分(回答问题)。我的网页将实时显示分数。 IV得出使用Redis的结论,但是我需要什么才能使其正常工作?我是否需要一个可与我的网页进行通信的Web套接字。这个套接字可以是python,它在其中访问数据库,然后按顺序响应分数? 我正在努力寻找这种方法到底是怎么工作的,因为这对