【问题标题】:HTML5 postMessage without window reference没有窗口参考的 HTML5 postMessage
【发布时间】:2013-06-25 18:04:41
【问题描述】:

HTML5 postMesssage API 允许在 window opener 和 openee 之间发送消息。但是,它需要引用/链接到接收器窗口。

是否有一种纯客户端 JavaScript 方式向所有窗口订阅者广播事件,在同一域名下,由用户(例如重复选项卡)同一会话打开,无需服务器帮助?

目前,我想出一些想法

  • 服务器端通道(通过 $_SESSION)和轮询
  • JS Cooking 更新和轮询(hard cookie play)
  • 本地存储更新和轮询(甚至最差)
  • WebRTC? (浏览器支持不佳)

有没有我错过的 API?

顺便说一句,不需要跨域。我正在考虑同一个域,用户可以多次打开。

【问题讨论】:

  • 只需使用window.postMessage("whatever", "whatever");。如果你使用window.,它会广播……如果你使用另一个窗口引用,它只针对那个。我相当确定。你有没有打扰测试?这可能比实际规范更容易理解:developer.mozilla.org/en-US/docs/Web/API/window.postMessage
  • 其实我撒了谎。我不知道我为什么这么认为。我想我从来没有真正测试过它,但是看起来你不能广播。我不确定它是否有帮助,但您可以查看:stackoverflow.com/questions/1100336/… - 第二个答案表明一个非常酷的库,它利用了Storage 事件

标签: javascript html postmessage


【解决方案1】:

为谁寻找变通解决方案。

我最终使用 window.localStorage(甚至没有 sessionStorage)并使用 onstorage 触发我的事件处理程序。

在某些浏览器(嗯,我的意思是 IE)上存在一些关于会话隔离的问题,即 sessionStorage 上的更改可能会或可能不会发送到另一个窗口。同时 localStorage 做得更好。

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2018-02-13
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多