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

是否可能在浏览器窗口之间进行基于事件的通信?[副本]

萧嘉禧
2023-03-14

是否可以在浏览器选项卡/窗口之间进行基于事件的通信?

我知道使用本地存储是可能的(至少在理论上)。你能提供一个这样做的代码的小例子吗?只需在一个选项卡中发送事件,然后在另一个选项卡中接收它。

有什么库/jQuery-plugins可以做到这一点吗?

(我知道我可以使用Cookie在同一浏览器的窗口/选项卡之间进行通信;但这不是我需要的;我更喜欢基于事件的方法,我不想每隔一毫秒就重新检查Cookie的状态)。

共有2个答案

华聪
2023-03-14

给信号坡道一个机会。

您可以将任何可绑定的类名附加到元素以同步UI中相应的mousedown、mouseup、hover(mouseover,mouseout)或click事件。

雍飞雨
2023-03-14

Localstorage有一些事件,您可以订阅这些事件来同步其他页面。

注意:如果您在窗口a中更新键的值,该事件将不会在窗口a中触发。它将在窗口B和C中触发。

下面是一个演示:http://html5demos.com/storage-events

在多个选项卡中打开此页。更改输入上的值并在div中看到它的反映。

下面是JavaScript的代码:

var dataInput = document.getElementById('data'),
output = document.getElementById('fromEvent');

// handle updates to the storage-event-test  key in other windows
addEvent(window, 'storage', function (event) {
  if (event.key == 'storage-event-test') {
    output.innerHTML = event.newValue;
  }
});

// Update the storage-event-test key when the value on the input is changed
addEvent(dataInput, 'keyup', function () {
  localStorage.setItem('storage-event-test', this.value);
});

标记:

<div>
      <p>Your test data: <input type="text" name="data" value="" placeholder="change me" id="data" /> <small>(this is only echoed on <em>other</em> windows)</small></p>
      <p id="fromEvent">Waiting for data via <code>storage</code> event...</p>
</div>

HTML5规范讨论了事件中传递的所有信息:

[Constructor(DOMString type, optional StorageEventInit eventInitDict)]
interface StorageEvent : Event {
  readonly attribute DOMString key;
  readonly attribute DOMString? oldValue;
  readonly attribute DOMString? newValue;
  readonly attribute DOMString url;
  readonly attribute Storage? storageArea;
};

dictionary StorageEventInit : EventInit {
  DOMString key;
  DOMString? oldValue;
  DOMString? newValue;
  DOMString url;
  Storage? storageArea;
};

来源:http://www.w3.org/tr/webstorage/#the-storage-event

使用此事件,可以使其他页在本地存储中的特定键更新时作出反应。

 类似资料:
  • 问题内容: 在同一浏览器的选项卡/窗口之间进行JavaScript通信的最可靠方法是什么?例如,当选项卡2开始播放音频时,选项卡1以某种方式知道这一点并可以暂停其播放器。 我正在建立一个带有音乐播放器的网站…因此,如果您现在打开该网站的两个标签,则可以同时在两者上播放音乐。这显然是不好的,所以我正在尝试寻找解决方案。 有任何想法吗?谢谢 问题答案: 这是一个旧的答案,我建议使用此处描述的现代版本:

  • 问题内容: 为了澄清当我询问浏览器到浏览器的通信时,我的意思是在转发消息之间没有服务器。我想为游戏实现这样的功能。如果无法在websockets中使用p2p,是否有类似的选择?任何帮助表示赞赏。 问题答案: 否。浏览器只能启动WebSockets连接,不能接收它们。在W3C的浏览器API规范只定义了如何启动出站连接。 您可以创建一个既可以启动也可以接受WebSockets连接的应用程序,但是浏览器

  • 问题内容: 我正在寻找一种在客户端(即在浏览器中)进行traceroute的方法。 据我所知,不可能通过Javascript或Flash发送具有任意TTL值的ICMP,UDP或TCP数据包。我知道Flash允许通过Actionscript中的Socket类进行TCP连接,但是它对于traceroute实现似乎没有用。 是开发浏览器插件的唯一解决方案吗? 编辑 :我刚刚发现它已经用Java小程序完成

  • 我有一个Chrome扩展,我目前正在写一个网站来宣传它。我知道一个Chrome扩展可以安装在所有基于Chromium的浏览器(Chrome、Opera等)中。 是否可以检查浏览器是否可以从网络商店下载扩展,或者是否基于chromium? 我在这里找到了检测是否是谷歌Chrome的代码。如果我错了,请纠正我,但是我认为不会在所有基于Chromium的浏览器中返回。

  • 问题内容: 使用Firefox,WebKit和Internet Explorer的窗口调整大小事件的正确(现代)方法是什么? 并且可以打开/关闭两个滚动条吗? 问题答案: jQuery 为此具有内置方法: 对于用户界面的响应起见,你可以考虑使用的setTimeout只有经过数毫秒打电话给你的代码,如下面的例子,启发这样:

  • 问题内容: 我想捕获浏览器窗口/选项卡关闭事件。我已经尝试使用jQuery以下内容: 但这也适用于表单提交,这不是我想要的。我想要一个仅在用户关闭窗口时才触发的事件。 问题答案: 每当用户出于任何原因离开您的页面时,都会触发该事件。 例如,如果用户提交表单,单击链接,关闭窗口(或选项卡)或使用地址栏,搜索框或书签进入新页面,则将触发该事件。 您可以使用以下代码排除表单提交和超链接(其他框架除外):