跨浏览器选项卡共享 websocket?

2024-04-14

我们希望每个浏览器都有一个套接字,而不是浏览器中的每个选项卡都有一个套接字。我们怎样才能实现它呢?我读到了有关共享网络工作者的文章,这很有前途。对此的参考也值得赞赏。不幸的是,据我所知,共享网络工作者尚未被 Mozilla 或 Internet Explorer 实现。那么这种情况下该怎么办呢?我们正在服务器端开发 Node.js。


看到这个问题后,我终于实现了共享套接字并在几天前添加到我的库中。它似乎适用于大多数浏览器,甚至包括 IE6,但 Opera 除外。对于 Opera,您可以使用定期检查而不是卸载事件。

检查相关问题https://github.com/flowersinthesand/portal/issues/21 https://github.com/flowersinthesand/portal/issues/21

###留下一个cookie

  1. 设置 cookie 以通知存在共享套接字。
  2. 当套接字关闭时,删除该 cookie 以通知没有共享套接字。

See, https://github.com/flowersinthesand/portal/blob/7c2ce4bb61d05d80580e6cde6c94a78238a67345/jquery.socket.js#L629-L650 https://github.com/flowersinthesand/portal/blob/7c2ce4bb61d05d80580e6cde6c94a78238a67345/jquery.socket.js#L629-L650

###共享和使用共享套接字

  1. 使用存储事件和 localStorage - 当设置和删除值时,localStorage 会触发存储事件。
  2. 检查是否支持 StorageEvent 和 localStorage。
  3. 添加存储事件处理程序,按键过滤事件。我使用套接字的 url 作为键
  4. 添加套接字的关闭事件,删除存储属性
  5. 要发出信号,请使用上一个键将数据设置为存储

分享:https://github.com/flowersinthesand/portal/blob/7c2ce4bb61d05d80580e6cde6c94a78238a67345/jquery.socket.js#L531-L568 https://github.com/flowersinthesand/portal/blob/7c2ce4bb61d05d80580e6cde6c94a78238a67345/jquery.socket.js#L531-L568

使用共享:https://github.com/flowersinthesand/portal/blob/7c2ce4bb61d05d80580e6cde6c94a78238a67345/jquery.socket.js#L851-L893 https://github.com/flowersinthesand/portal/blob/7c2ce4bb61d05d80580e6cde6c94a78238a67345/jquery.socket.js#L851-L893

  1. 使用 window.open 方法 - 如果我们知道共享窗口的名称,我们就可以获得该窗口的引用并访问其属性。
  2. 每个浏览器都支持 window.open 方法,但某些浏览器(例如 Chrome)禁止访问返回的窗口的属性。
  3. 获取或创建 name 属性为 key 的 iframe。我使用了套接字的 url,但请注意 IE 不允许在 iframe 标记的 name 属性中使用非单词字符。
  4. Iframe 的 contentWindow 是共享窗口引用。设置回调变量来存储每个窗口的侦听器。
  5. 要发出信号,只需使用数据调用回调即可。请注意,IE 8 及更低版本允许仅将字符串传递给其他窗口的函数,并且共享窗口可能会被破坏。

分享:https://github.com/flowersinthesand/portal/blob/7c2ce4bb61d05d80580e6cde6c94a78238a67345/jquery.socket.js#L571-L605 https://github.com/flowersinthesand/portal/blob/7c2ce4bb61d05d80580e6cde6c94a78238a67345/jquery.socket.js#L571-L605

使用共享:https://github.com/flowersinthesand/portal/blob/7c2ce4bb61d05d80580e6cde6c94a78238a67345/jquery.socket.js#L894-L929 https://github.com/flowersinthesand/portal/blob/7c2ce4bb61d05d80580e6cde6c94a78238a67345/jquery.socket.js#L894-L929

Note

  1. 在上述实现中,信令是广播,因此数据应该指示目标。我使用目标属性,p 代表父级,c 代表子级。
  2. 我使用附加变量来共享套接字:opened - 共享套接字是否打开,children - 共享者列表。代码和注释将帮助您理解细节。

我希望我的回答有帮助。

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

跨浏览器选项卡共享 websocket? 的相关文章

  • 角度垫排序不适用于带点表示法的 matColumnDef

    我正在尝试按列对表进行排序 当我必须过滤另一个结果中的结果时 就会出现问题 我尝试通过括号表示法和点表示法访问该属性 但没有给出结果 还将最终节点放置在 matColumnDef 中 但失败 因为有 2 列同名 table table
  • 从对象中取出具有无效(NaN、空白等)值的键的最佳方法?

    我有一个供用户填写的简短搜索表单 将有多个搜索查询进入 MongoDB 该表单创建一个名为的变量searchParams可能看起来像这样 var searchParams city Springfield bedrooms 3 bathro
  • Javascript:我应该隐藏我的实现吗?

    作为一名 C 程序员 我有一个习惯 将可以而且应该私有的东西设为私有 当 JS 类型向我公开其所有私有部分时 我总是有一种奇怪的感觉 而且这种感觉并没有被 唤起 假设我有一个类型draw方法 内部调用drawBackground and d
  • 使用 # 时锚点 标签在 Chrome 中不起作用

    这是我在页面上使用的代码 li a href explore Sound Sound a li 在所有页面上出现的菜单中 a a 在我想要链接的页面上 我尝试过使用 id 将内容添加到标签中 但仅在 Chrome 中 浏览器不会向下滚动到该
  • 函数不会等到 Promise 得到解决

    我正在开发一个简单的不和谐机器人 我正在尝试打印有关某个玩家的一些一般数据 我最近了解了 async await 并尝试将其实现到我的代码中 然而 它似乎不起作用 因为当我第一次触发此代码时 它会打印 null 但在后续触发时 它将打印正确
  • Next.js:错误:React.Children.only 期望接收单个 React 元素子元素

    我有一个名为Nav inside components目录及其代码如下所示 import Link from next link const Nav gt return div a Home a a About a div export d
  • 在 Chrome 中隐藏 HTML 时间输入字段上的图标

    在 Chrome 中 当您type time 属性到输入框 您会在输入旁边看到一个小图标时钟图标 有没有办法去掉这个小时钟图标 基于这个问题的答案 将日期输入三角形更改为日历图标 https stackoverflow com questi
  • JSONP 使用 JQuery 从 HTTPS 协议获取 JSON

    我正在尝试获取从 https 安全站点发送的 JSON 客户端希望不要使用任何服务器端语言 全部都是 Javascript 我读到 当使用 Jquery 中的 ajax 函数时 我必须使用 JSONP 才能从安全站点加载 JSON 我的第一
  • D3 向对象添加超链接?

    我正在尝试制作 D3 图 它将代表我网站的菜单 我尝试按照此处的其他指南添加超链接 但它们都不起作用 每个对象都会有一个不同的 URL 指向 主页 关于 联系方式等 如果添加超链接 我可以拖动对象吗 这意味着如果我按住单击 如果我单击该对象
  • 引用自身的 Javascript 对象...有问题吗?

    由于 Javascript 允许通过引用分配复合值 因此如果 Javascript 对象引用自身 它将创建无限的引用集 如控制台中所示 这看起来像是某种无限循环 但 Chrome 似乎没有问题 这样做是否存在任何内存问题或其他风险 就记忆力
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • 使用 Express.js 和 NodeJS,您可以通过响应正文中的重定向发送 JSON

    我正在尝试通过 302 重定向发送 JSON 在 ExpressJS 中这可能吗 API 声明可以添加主体res json 例如 res json 302 name larry 在接收端 重定向的目的地 主体是空的 这是一些示例代码 发送应
  • 使 Bootstrap Popover 在悬停而不是单击时出现/消失

    我正在使用 Bootstrap 构建一个网站Popover http twitter github com bootstrap javascript html popovers我不知道如何使弹出窗口出现在悬停而不是单击时 我想做的就是当有人
  • 如果选中复选框则显示 div

    我正在尝试构建类似 WordPress 选项的东西 用于在创建文章时切换字段可见性 我所构建的依赖于 click函数使用相应的字段名称切换父项 我想知道如果选中该复选框 执行此操作的最佳方法是什么 因为如果您选中一个框并重新加载页面 因为它
  • 使用ExternalInterface和IE从JavaScript获取Flash中的当前URL

    我正在尝试获取 Flash 播放器当前所在的 URL 不是 swf 文件的 URL 而是浏览器指向的 URL 到目前为止我已经使用过 var st String ExternalInterface call window location
  • 将 JSON 属性绑定到表单

    我有一个 JSON 对象和一个
  • 减小 TinyMCE 文本区域中的行间距

    I am using TinyMCE to provide a rich text editing text editor But the line spacing between the lines is too much I have
  • 如何使用 AMQP 以“PeekLock”模式从 Azure 服务总线队列获取消息?

    我们正在尝试在 Node 应用程序中使用 Azure 服务总线 我们的要求是从队列中获取多条消息 由于Azure SDK for Node不支持批量检索 我们决定使用AMQP 虽然我们能够使用 Peek Messages 获取消息 如此处所
  • Chrome 调试器注入 javascript

    我有这样的好奇心 是否可以以某种方式在我的页面中注入 javascript 并执行它并调试它 正如您在控制台中所做的那样 但在控制台中您无法暂停并观察变量 是否可以调试我通过控制台输入的代码 为什么无法调试通过 XHR 接收的代码 Than
  • $ 在 JQuery 中意味着什么

    在下面的 var obj one 1 two 2 three 3 four 4 five 5 each obj function i val console log val 这里是什么意思 是对象吗 是一个别名jQuery对象 函数 它充当

随机推荐

  • 如何从 Solr 查询中获取 tf 和 idf 分数?

    以下 Solr 文档 https cwiki apache org confluence display solr Function Queries https cwiki apache org confluence display sol
  • 使用 AzureReader2 调整图像大小会导致 404

    当我尝试使用 AzureReader2 调整图像大小时 收到 404 错误 但是 在使用存储模拟器进行开发时不会发生这种情况 仅在部署到 Azure 时才会发生 当没有调整大小时也不会发生这种情况 So http myapp azurewe
  • 如何使用 SQLiteOpenHelper 与 sd 卡上的数据库?

    根据这里和网络扩展应用程序中的各种答案及其继承的方法 getDatabasePath 将允许设置从标准内部存储器位置到插入的更大尺寸的 SD 卡的数据库存储路径 这对我不起作用 建议的构造仍然使用内存上的数据库 事实上 SQLiteOpen
  • 推送通知中不播放声音

    我使用的是 iOS 7 我的推送通知不播放声音 Strangely I found there is no setting for sound in the Preference gt Notification Center for my
  • 使用 Javascript 函数更改 onclick 操作

    我有一个按钮
  • 创建额外的 D3.js 符号

    D3 已经具有很多功能symbols https github com mbostock d3 wiki SVG Shapes wiki symbol 但我想添加一个自定义的 这样我就可以打电话d3 svg symbol type cust
  • Android底部导航栏项目背景颜色在选择fragment时发生变化

    我希望我的底部导航栏在按下时改变背景颜色 仅选定区域 就像下面的链接一样 http uupload ir files nq3k tab bar jpg http uupload ir files nq3k tab bar jpg 这是我的选
  • nifi invokehttp post复杂的json

    我尝试在 Apache NiFi 中使用 InvokeHttpProcessor 来执行具有复杂 JSON 正文的 POST 请求 因此本教程 http www tomaszezula com 2016 10 30 nifi and htt
  • PostgreSQL 中是否有可用的多值字段类型?

    我想知道是否可以在 PostgreSQL 的一个字段中存储多个值 我有一张桌子叫Token与列id text and category category是一个多值字段 是否有必要为其创建一个单独的表 或者有没有办法将其存储在Token ta
  • java.lang.NoSuchMethodError:没有静态方法 getDrawable(Landroid/content/Context;I)

    正在将 Socialize SDK 集成到我的应用程序中 我还将 Android Studio 更新到了 2 3 3 我的 Activity 的 super onCreate savedInstanceState 给了我一个错误 这里也提出
  • malloc(0) 的行为

    int main char p p char malloc sizeof char 0 printf Hello Enter the data without spaces n scanf s p printf The entered st
  • 如何在 Java 中定义重复的枚举常量?

    我想定义一个具有两个 值 相同的常量的枚举类型 我将这两个常量称为重复项 考虑以下示例 我想要定义一个浏览器类型列表 并且想要同时拥有文字 IE 和 InternetExplorer 如下所示 enum Browser CHROME chr
  • 关闭SKScene后,内存仍然居高不下

    我使用dispatch onceNSObject创建数据指针 因此 当主视图控制器出现时 所有游戏资源指针都会被创建 为了玩游戏 用户点击UIButton对应于某个特定级别UI视图控制器 让我称之为 LevelSelectionContro
  • AXML 和 XAML 之间的区别?

    我是 Visual Studio Xamarin 跨平台移动开发的新手 我一直在搜索 AXML 但我找不到任何设计和应用 MVC 方法的教程 实际上我对此有很多疑问 但我先把这 3 留在这里 他们有什么区别 xaml设计可以应用在axml中
  • 使用 psycopg cur.execute 创建 postgres 模式

    我的 python 应用程序允许用户创建其命名模式 我需要一种方法来保护应用程序免受 SQL 注入 要执行的SQL读取 CREATE SCHEMA schema name AUTHORIZATION user name psycopg 文档
  • PHP 正则表达式生成器

    我现在已经获得了满足以下所需条件的有效正则表达式字符串 一行 php 就绪正则表达式 包含许多关键字和关键术语 并且至少匹配其中一个 例如 关键术语 apple banana strawberry pear cake 现在 如果找到任何这些
  • git、mercurial、bazaar 源代码库的可理解性

    我想阅读一种流行的版本控制工具的源代码 以了解版本控制的工作原理 我想读一本最具可读性的书 我不知道对此有什么客观 定量的衡量标准 所以本着WTF 分钟漫画 http www osnews com story 19266 WTFs m 想请
  • 内容提供商中 Android 投影图的用途是什么?

    我正在查看 Android 记事本应用程序示例代码
  • Firefox Web 扩展“无法访问死对象”错误

    我很难找到这个问题的最新答案 并且经常没有时间在这里回答问题 所以我想我会发布这个 这样我就可以回答我自己的问题 因为我找到了解决方案 我正在为 Chrome 和 Firefox 制作一个 Web 扩展 Firefox 有一个问题 当我从选
  • 跨浏览器选项卡共享 websocket?

    我们希望每个浏览器都有一个套接字 而不是浏览器中的每个选项卡都有一个套接字 我们怎样才能实现它呢 我读到了有关共享网络工作者的文章 这很有前途 对此的参考也值得赞赏 不幸的是 据我所知 共享网络工作者尚未被 Mozilla 或 Intern