问题标签 [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.
javascript - 如何从网络工作者调用共享工作者?
是否可以从 Web Worker 调用 Shared Worker?
你能给我一个例子吗?
就我而言,我有一些网络工作者,我需要在他们之间共享一个单例服务。
javascript - 如何在 SharedWorker 中“仅启动一次”服务器发送事件以推送任何打开脚本的消息?
我有一个几乎没有问题的服务器发送事件 (SSE)实现。我遇到的唯一问题是“一个用户可以与服务器建立许多连接”。基本上,如果用户打开多个 Web 浏览器的选项卡,每个选项卡都会向服务器创建一个全新的服务器发送事件请求,这会导致来自单个用户的许多请求运行。
为了解决这个问题,我想在 Javascript 的SharedWorker中运行 SSE 。
这意味着我只有一个 SSE 与 SharedWorker 进行通信。然后,每个页面/Web 浏览器都将与 SharedWorker 进行通信。这给了我每个用户只允许一个 SSE 的优势。
这就是我的 SSE 目前在没有任何类型工人的情况下工作的方式。
我想运行相同的设置。但是,我想在 javascript 的 SharedWorker 中运行它,以消除每个用户拥有多个 SSE。
我正在努力实施 SharedWorker。这是我到目前为止尝试过的
我创建了一个名为worker.js
并将此代码添加到其中的文件
然后在我想列出消息的页面上,我有这个代码
我在这里想念什么?
我究竟做错了什么?
如何更正实施?
已编辑
根据@Bergi 下面的评论,这是我的实现的更新版本,它仍然没有向连接器发布消息。我在代码中添加了注释,解释了对代码发生了什么的理解。
在登陆页面上,即index.php
我像这样连接到我的 SharedWorker
这是我的worker1.js
文件包含的代码
这是我的另一个版本worker1.js
javascript - 为什么我的 ShardWorker 不在 Firefox 中运行,而是在 Google Chrome 中运行
我终于在 Shared Worker 中实现了运行 Server-Sent Event SSE。此实现允许我将服务器上运行的脚本总数限制为每个用户一个。
但是,我仍然有几个问题。
SharedWorker
根本不在 FireFox 中运行,但它在 Google Chrome 中运行。我正在使用 Firefox v40.0。我在控制台中没有收到任何错误。我确实在控制台中看到有关 SSL 证书的警告,但没有错误。这是来自 FireFox 控制台的警告
本网站使用 SHA-1 证书;建议您使用具有比 SHA-1 更强的哈希函数的签名算法的证书。[了解更多]
- 似乎
ShardWorker
在一段时间的空闲时间后停止工作。这不是 PHP 脚本问题,因为脚本在没有共享工作者的情况下工作文件。我在使用 Chrome v44.0 时遇到了这个问题。为了让 shardworker 重新开始,我必须重新加载页面。
我能做些什么来找出可能导致 ShardWorker 停止的原因?为什么不在SharedWorder
FireFox 中运行?
这是我的实现
这是代码帽子调用SharedWorker
这是代码worker.js
javascript - 将可转移对象与共享工作者一起使用
在我的共享工作者中使用可转移对象时,我在主线程中收到null
。event.data
经过一番搜索,我发现这篇文章解释说ArrayBuffer
当它通过 a 时总是MessagePort
丢失MessageChannel
。
共享工作者通信也使用端口和消息通道完成。这是否意味着无法在SharedWorker
实例中使用可转移对象?还是有一些解决方法?
我需要将一个巨大string
的从SharedWorkerGlobalScope
回传输到主线程。想法是将其转换ArrayBuffer
为如本例所示的,然后传输缓冲区。据说这比发送字符串要快得多......
发送数据:
接收数据:
javascript - 如何在不包含包装语法的情况下将函数注入脚本标记?
在这种奇怪的情况下,我需要将一个 JS 函数转换为一个字符串,然后将该字符串转换为一个动态生成的<script>
标签(它使用类型javascript/worker
以便不被执行)。
我正在编写用户脚本,注入代码以在两个第三方站点之间创建共享网络工作者。关于用户脚本的问题是您通常只想使用一个文件来实现脚本的功能,而 web 工作者喜欢为工作者使用单独的 JS 文件。那么有一种方法可以使用 Blob。但是,请记住,我只使用脚本文件,而不是用户脚本的 HTML 文件,所以我想将此部分(共享工作代码)作为函数存储在我的脚本中:
然后使用toString()
它,这样我就可以将它注入到第三方页面中动态生成的脚本标签中,所以它最终会像这样结束,而脚本不会调用任何额外的文件:
但是,使用该toString()
方法会导致function
包含单词,如下例所示:
请记住,我打算将函数附加到带有 type 的脚本标记,
javascript/worker
而不是text/javascript
这样,在将函数转换为 blob 并用作 worker 的文件源之前,该函数不会被执行,但在这里我将使用text/javascript
so您可以在执行时看到错误。
只是为了让您了解我在做什么,因为它可能会令人困惑,然后这样的函数会将上述未执行的脚本标记转换为 Blob 并使用它而不是外部文件来创建共享工作者:
那么,如何在不包含函数包装语法(function (){
)的情况下将函数的内容注入脚本标签?
jquery - jQuery 和共享工作者
我说 jQuery 不能在Sharedworker中使用是对的吗?共享工作者在浏览器选项卡之外运行,并且无法访问窗口/文档(我知道关闭)所以我认为 jQuery 不会再次工作,我认为它需要访问窗口对象。
以上就是这种情况 - 是否有任何方法或结构可用于修改 jQuery 代码,以便在不访问窗口对象的情况下加载它?
看着 jQuery 代码,我看到了这个 -
所以没有访问窗口或文档,它不能工作?
javascript - 什么是共享工作者?工人与共享工人之间的区别?
我不得不看共享工作者的例子。但我无法确定工人与共享工人之间的区别。共享工作者示例https://github.com/mdn/simple-shared-worker。谁能解释一下?
ms-office - window.opener 在 Excel for Windows 中不起作用
我已经构建了一个 Excel 加载项,它打开一个弹出窗口window.open
,然后加载项与弹出站点进行通信。我刚刚意识到它在 Excel for Windows 中不起作用,原因是弹出窗口无法通过$window.opener
.
为了说明这一点并避免跨域,我做了一个 xml,它指的是加载项和测试页面。它在 Chrome 和 IE 中的 Excel Online 中运行良好。但是,在 Excel for Windows 中运行它时,会$window.opener
返回undefined
.
谁能告诉我发生了什么,解决方法是什么?
(对于推荐 Dialog API 的人,请参阅此线程。所以现在 Dialog 和window.open
Excel for Windows 都不起作用)。