问题标签 [shared-worker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
106 浏览

javascript - Firefox 57+ 共享工作者错误的功能检测

正如在这个问题这个 bug中所讨论的,共享工作者在 Firefox 57 版本中被严重破坏。基本上,“共享”部分丢失了。它应该工作的方式是在两个选项卡中使用相同的工作脚本创建一个共享工作人员只会创建一个工作人员实例,但在 Firefox 中它会创建两个实例。

任何使用共享工作者的人都熟悉这类问题,因为 IE、Edge 或 Safari 不支持共享工作者。因此,您必须与网络工作者合作。没关系,我可以对有问题的 Firefox 版本做同样的事情,除了......我如何为此进行功能检测,以便在这种情况下发送我的工作人员的非共享版本?

我想我可以使用这样的工人,看看计数器是否在不应该重置的时候重置:

我的第一个想法是在同一个页面中创建两个共享工作者,看看他们两个的计数器是否都是 0。但事实并非如此。这个:

产生正确的输出:

然后我想也许我可以在同一页面内的两个 iframe 中运行该脚本,但没有骰子,这也是正确的:

如果我在两个选项卡中打开页面,我可以看到问题 - 每个选项卡中的计数器重置为 0。但是如果它需要用户打开一个新标签,它就不是很有用的特征检测。更糟糕的是,该错误似乎是间歇性的。有时,计数器确实会跨标签正确地持续存在!所以这种方法是行不通的......

这似乎是一个非常讨厌的错误来进行特征检测。有没有人有任何想法?还是我卡在解析用户代理字符串?

0 投票
0 回答
299 浏览

javascript - 使用带有页面导航的共享网络工作者上传文件

一旦开始处理文件的上传,我想做不会影响页面主要使用的文件的后台上传。

除此之外,我们希望能够从执行上传的页面导航到应用程序中的其他页面,而不会中断上传。

我已经使用 Web worker/SharedWorker 实现了它,以在后台使用 XMLHTTPRequest 发布请求将文件对象发送到服务器。它在启动上传并且没有导航到其他页面时工作正常。但是在从 page1.html 开始上传后导航到 page2.html 时,request.getPart() 在服务器端返回 null 并且上传失败。

使用 sharedWorker 提交的任务是否会在导航到同一域中的其他页面时停止/暂停?

为什么 request.getPart() 在导航到其他页面时返回 null ,因为 sharedWorker 在导航到同一域中的其他页面时仍然必须运行?

我的应用程序的结构是:

  1. main.html - 具有多部分表单并创建共享工作线程来上传表单
  2. worker.js - 使用 XMLHTTPRequest 发布请求将文件对象发送到服务器。
  3. server - HTTP servlet 处理 post 请求并保存文件

我们如何实现以下功能:

  • 使用后台 SharedWorker/WebWorker 从主页启动上传
  • 导航到同一域中的其他 page2
  • 导航回主页并从 SharedWorker/WebWorker 获取上传状态

任何链接/建议都将非常受欢迎。

谢谢,曼普里特

0 投票
0 回答
174 浏览

javascript - 共享工作者 - 我可以拥有不同组的同一个共享工作者吗?

我已经实现了一个 sharedWorker 作为我的 Web 应用程序中多个选项卡之间的通信通道。

但是,如果不同的用户在每个选项卡上登录,我不希望一个选项卡中的 sharedWorker 与另一个选项卡中的 sharedWorker 通信。

是否有一些选项可以传递给 sharedWorker 构造函数来实现这种分离?

例如:选项中的标识符属性。

我知道我可能可以在我的工作脚本中处理这个问题,但是关于 sharedWorkers 的文档并不太详细,我宁愿不实现已经融入其中的东西。

谢谢!

0 投票
1 回答
2063 浏览

javascript - 在 React 中使用 Shared Worker

我有一个后端应用程序,它通过 Web Sockets 不断地为我的 React 应用程序提供事件。收到特定事件时,应打开新的浏览器选项卡。该应用程序将由用户在多个选项卡中运行,因此我只需要打开一个新选项卡并防止它被所有正在运行的实例打开。

我尝试过使用 Redux 持久存储,但它似乎不符合我的需求。我发现的最佳解决方案是 Shared Workers。

我尝试在我的 React 应用程序中使用 Shared Worker,但我无法正确设置它。它要么被错误地导入,要么 Webpack 无法加载它 Uncaught SyntaxError: Unexpected token <

当我用谷歌搜索时,我没有找到任何在 React 应用程序中使用 Shared Worker 的示例(有或没有 CRA),在这一点上,我什至不确定这是否可能。我确实找到了一些 Web Workers 示例,但它们的配置完全不同。

任何人都可以分享一些在 React 中运行 Shared Worker 的细节吗?或者任何其他可以为我提供类似功能的想法也将不胜感激。

编辑:添加我尝试过的最新代码。忽略计数器逻辑,只考虑设置:

worker.js

应用程序.js

0 投票
1 回答
594 浏览

websocket - Websockets+单实例+交叉表通信的最佳方式?

我正在使用 websockets 来传递 json 消息,但如果打开了多个选项卡,我不想要多个 ws 连接。

为了减少连接,我想实现一个单一的 ws 连接对象,它可以向我的网站的所有选项卡发送/接收消息。该对象应将 json 转发到所有选项卡,并且每个选项卡都将处理该消息。

我一直在关注网络/共享/服务工作者,我不确定 2018 年解决问题的路径,浏览器支持似乎也是一个问题。

Safari 中似乎不支持共享工作人员以支持服务工作人员。Chrome/ff/opera 似乎支持共享工作者。

简而言之,这有点令人困惑,有点混乱,我想知道在最好的支持下最好的前进道路。

如果您知道一个好的资源,使用您建议的方法实现 ws 的示例代码也请提供。

0 投票
1 回答
288 浏览

javascript - Android Chrome SharedWorker 问题

Android Chrome 在“new SharedWorker()”处抛出异常。它打印出 SharedWorker 未定义,但相同的代码在桌面 Chrome 上完美运行。为什么?

0 投票
0 回答
69 浏览

javascript - 角度应用程序如何知道 SharedWorker 是否已经存在?

我有一些脚本在和 remoteSharedWorker之间进行同步。但是当我打开应用程序的附加选项卡或窗口(我的应用程序中的一个用例)时,它会创建另一个同步过程。当然是多余的。indexedDbdb

SharedWorker如果同步过程已经存在,我希望我的应用程序会收到通知。如果此进程已存在,则不会创建新的 app 实例(另一个选项卡)new SharedWorker()。我如何得到它?

0 投票
0 回答
140 浏览

javascript - 如何在 UI 线程和 service worker 之间共享 WebAssemly 模块?

我的 Web 应用程序正在使用 Web 组装模块进行一些重要的操作。它设置了一个服务工作者来处理推送通知。主线程和推送通知处理程序都需要访问 Web 组装模块。

是否有推荐的方法来共享 wasm 模块?

我的第一个想法是把它放在服务工作者中,让主线程调用工作者,但是它可能会变得空闲,工作者需要再次加载和初始化 wasm 模块,这大约需要 800 毫秒。我也可以使用共享工作者,但我不相信服务工作者可以产生共享工作者,因此如果主线程关闭,解决方案将无法工作。

有这样做的规范方法吗?

0 投票
0 回答
112 浏览

javascript - 是否可以跨子域使用 Shared Worker?

我有两个子域:
one.example.com
two.example.com

当我使用 Shared Worker(从 one.example.com/sharedworker.js 和 two.example.com/sharedworker.js 提供服务)时,两个域都可以访问同一个 SharedWorkerGlobalScope 吗?

如果没有,除了使用cookies之外,是否有可能在客户端以某种方式跨子域共享存储?

0 投票
0 回答
87 浏览

javascript - 是否可以从服务工作者文件运行 socketIO 连接

我尝试使用共享工作者运行它。它按预期工作,但单个选项卡连接的例外情况是,单次刷新仍会创建新的套接字连接。我决定尝试服务工作者,因为相比之下它的寿命更长。但是,这在创建带有错误的套接字连接时失败Uncaught (in promise) ReferenceError: document is not defined。即使对于单个选项卡,创建单个套接字连接的最佳选择是什么。

PS:使用SSR