Javascript JS-IPC;将消息从一个选项卡发送到另一个选项卡?

Javascript JS-IPC;将消息从一个选项卡发送到另一个选项卡?,javascript,Javascript,例如,使用youtube center(一个用户脚本),我可以在一个选项卡中播放youtube视频,打开另一个视频,第一个视频将暂停。如果我切换制表符并点击play,另一个将暂停。用户脚本是如何做到这一点的?我试着看了看 它似乎使用套接字,但看起来套接字是一个。它说它模仿了socket.io,我也不知道,但我相信这一个不会连接到站点,而socket.io会连接到站点。注释说明了发生了什么。它使用localstorage(HTML5功能)编写和通知: /** *建立在顶部的跨窗口广播服务 *HTM

例如,使用youtube center(一个用户脚本),我可以在一个选项卡中播放youtube视频,打开另一个视频,第一个视频将暂停。如果我切换制表符并点击play,另一个将暂停。用户脚本是如何做到这一点的?我试着看了看


它似乎使用套接字,但看起来套接字是一个。它说它模仿了socket.io,我也不知道,但我相信这一个不会连接到站点,而socket.io会连接到站点。

注释说明了发生了什么。它使用localstorage(HTML5功能)编写和通知:

/** *建立在顶部的跨窗口广播服务 *HTML5本地存储API的一部分。接口 *在设计中模拟socket.io。 *

以下几行设置了侦听器

if (identifier === 6) {
      session_addEventListener("storage", storageHandler);
    } else if (window.attachEvent) {
      document.attachEvent('onstorage', storageHandler);
      ytcenter.unload(function(){
        document.detachEvent("storage", storageHandler);
      });
    } else {
      window.addEventListener('storage', storageHandler, false);
      ytcenter.unload(function(){
        window.removeEventListener("storage", storageHandler, false);
      });
    }
显然,这两个选项卡上都有侦听器,因此每次向localstorage写入/读取时,都会通知另一个选项卡

简言之,不,数据不会进入服务器。它只需写入localstorage,并依靠浏览器在所有选项卡上同时对localstorage进行更改

您可以在此处阅读有关存储事件的更多信息:

值得注意的是,只有在激活文档时,事件才立即可用(即,在激活选项卡之前,您的事件不会/可能不会得到处理)。我假设不同的浏览器处理“激活”的方式不同

这样的文档对象不一定完全处于活动状态,但在文档再次完全处于活动状态之前,事件循环将忽略在这些对象上激发的事件