浏览器窗口之间是否可以进行基于事件的通信? [复制]

2023-12-07

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

我知道(至少理论上)可以使用本地存储。您能否提供执行此操作的代码的小示例?只需在一个选项卡中发送事件,然后在另一个选项卡中接收事件。

有没有库/jquery 插件可以做到这一点?

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


Localstorage 具有您可以订阅以同步其他页面的事件。

注意:如果您更新窗口 A 中的键值,该事件将not在窗口 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);
});

Markup:

<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>

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

[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;
};

From: http://www.w3.org/TR/webstorage/#the-storage-event

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浏览器窗口之间是否可以进行基于事件的通信? [复制] 的相关文章

随机推荐

  • 我们可以在棒棒糖设备中显示旧式时间选择器(Pre Lollipop Time Picker)

    我想在棒棒糖设备中显示较旧的时间选择器 例如棒棒糖设备之前的时间选择器 可以 这个是可以的 您可以通过将 timePickerMode 属性设置为 spinner 来指定微调器样式的时间选择器 材质的默认值为 clock
  • 如何计算相对价值再平衡的 if 语句/错误:“系列的真值不明确”

    下面是我编写的代码 用于计算 df a 和 df b 值的相对变化 而 df 是一个数据帧 基本上需要计算的是df c df a df a iloc df d values df d 设置为等于 df t 如果df a df a iloc
  • JavaScript 什么时候是同步的?

    我一直认为 JavaScript 总是异步的 然而 我了解到有些情况并非如此 即 DOM 操作 关于何时同步 何时异步 是否有一个很好的参考 jQuery 对此有影响吗 JavaScript 始终是同步和单线程的 如果您在页面上执行 Jav
  • PHP Foreach 循环和 DOMNodeList

    我试图确定以 DOMNodeList 集合为种子的 foreach 循环的结束 目前 我正在使用 for 循环 希望避免出现 魔术 数字 我确实知道只有 8 列 但我希望代码对其他应用程序通用 是否可以将其转换为 Foreach 循环 我尝
  • 递归地进行更改:如何修改算法以打印所有组合?

    我有一个算法 可以通过以下方式递归地进行更改 public static int makeChange int amount int currentCoin if amount zero we are at the bottom of a
  • 将包含列表的 pandas 列“unstack”成多行[重复]

    这个问题在这里已经有答案了 假设我有以下 Pandas 数据框 df pd DataFrame a 1 2 3 b 1 2 2 3 4 5 a b 0 1 1 2 1 2 2 3 4 2 3 5 我如何 取消堆叠 b 列中的列表以便将其转换
  • WCF:使用 WsHttpBinding 是否可以互操作?

    顾名思义 现在我正在使用 BasicHttpBinding 但我想知道是否可以切换到 WSHttpBinding 并且仍然可以与 Java 等设备进行互操作 wsHttpBinding 和较新的 ws2007HttpBinding 都实现
  • r for 回归循环 lm(y~x)

    Example df lt data frame A 1 5 B 2 6 C 3 7 D 4 8 E 5 9 F 6 10 我想使用像 y 一样的列 1 和 2 以及像 x 一样的其余列来制作回归循环 lm y x my idea lmf
  • 将动态生成的列表中的数据从一个页面传递到另一页面

    在我的 jquery 移动应用程序中 我有一个动态生成的列表视图 我想要做的是当用户单击列表项时 我想从列表项中的隐藏字段获取一个值并将该值传递到另一个页面 以便我可以根据该变量值进行查询 这是多页布局 由于我与第一页位于同一 DOM 中
  • 如何在android中制作通话记录应用程序

    我是一名 android 新手程序员 我想制作一个 android 应用程序来记录电话活动 例如来电 去电或未接来电 并将日志记录到文件 txt 我应该怎么办 请帮我 看一眼通话记录 通话 以下是一些有关使用通话记录的好教程 android
  • 当 JSONP 和 CORS 等解决方法存在时,为什么浏览器有同源策略?

    这个问题有点重复 为什么 XMLHttpRequest 的同源策略 然而 这个答案并不令人满意 因为它没有解决存在解决方法的事实 如问题中所述 答案仅解决与 XMLHttpRequest 直接相关的安全问题 但 JSONP 仍然存在这些问题
  • jquery 一对一切换多个div

    我想做的是在不同的 div 之间切换 这有点难以解释 但我会尝试一下 当页面加载时 将有一个可见的 div 和 4 个带有 display none 的 div 会有一个菜单 链接 1 将显示第一个 div 并隐藏所有其他 div 然后 当
  • Swift 中按属性对类或结构数组进行排序的通用函数

    我想创建一个通用函数来根据传递的属性对类数组进行排序 例如 我有这些课程 public class Car var id Int var manufacturer String var variant String init id Int
  • JPA、SQlite没有这样的表:SEQUENCE

    我对 JPA 和 SQlite 有疑问 我已经从表创建了一个实体 我生成的实体如下所示 Entity Table name sqliteTestTable public class Test implements Serializable
  • 相同代码中的行为不一致

    运行物理模拟大约 20 分钟后会出现错误陷阱 意识到这对于调试来说是一件痛苦的事情 我在一个新项目中复制了相关的子例程 并在错误发生时使用原始输入数据的硬编码副本来调用它 但错误陷阱并没有跳出来 经过两天繁琐的工作来隔离子例程的两个实例的行
  • 将文本从 Firefox WebExtension 中的后台脚本复制到剪贴板

    我正在将 Chrome 扩展程序移植到 Firefox 它具有粘贴到剪贴板的功能 但是 我还没有在 Firefox 中做到这一点 这是我在后台脚本中尝试执行的操作 const input document createElement tex
  • 为什么我的序言规则陷入无限递归

    我的代码可以达到其预期目的 但最后总是陷入循环 给出错误消息 超出堆栈限制 我的代码如下 byCar auckland hamilton byCar hamilton raglan byCar valmont saarbruecken by
  • Javascript 脚本在表单输入中查找乱码

    我需要一个脚本或正则表达式 我将使用 Javascript jQuery 来检查网站上的表单输入 来检查是否有人输入了大部分是乱码的单词 正常的单词或句子应该通过测试 This is a normal sentence pass Peter
  • 非详尽的模式匹配只是因为我省略了“否则=”? [复制]

    这个问题在这里已经有答案了 我用 Haskell 写了一个简单的程序来播放 The Rust 编程语言 一书中描述的猜谜游戏 它的工作原理如下 程序将生成一个 1 到 100 之间的随机整数 然后它会提示玩家输入猜测值 输入猜测后 会显示猜
  • 浏览器窗口之间是否可以进行基于事件的通信? [复制]

    这个问题在这里已经有答案了 是否可以有基于事件的浏览器选项卡 窗口之间的通信 我知道 至少理论上 可以使用本地存储 您能否提供执行此操作的代码的小示例 只需在一个选项卡中发送事件 然后在另一个选项卡中接收事件 有没有库 jquery 插件可