- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
MDN Documentation on SharedWorkers状态:
The SharedWorker interface represents a specific kind of worker that can be accessed from several browsing contexts, such as several windows, iframes or even workers.
对我来说,这听起来好像 SharedWorkers 应该能够直接交换消息。但是,如果我尝试从另一个 SharedWorker 中访问一个 SharedWorker,即使用
var worker = new SharedWorker("path/to/file.js");
我明白了
ReferenceError: SharedWorker is not defined
我只是误读了文档,还是有其他方法可以做到这一点?
最佳答案
虽然你似乎无法从共享 worker 创建共享 worker ,但你可以通过在主线程中创建它们,并将其中一个的 MessagePort
对象传递给它们来实现它们之间的通信另一个。请注意,您必须将端口包含在 postMessage
的传输列表参数中:它不能被复制。
例如,在主线程中创建worker,并将其中一个的端口发送给另一个:
var myWorker1 = new SharedWorker("worker1.js");
myWorker1.port.start();
var myWorker2 = new SharedWorker("worker2.js");
myWorker2.port.start();
myWorker2.port.postMessage({worker1Port: myWorker1.port}, [myWorker1.port]);
在第一个 worker 中,您可以在端口上发送消息:
self.onconnect = function(e) {
var port = e.ports[0];
self.setInterval(function() {
port.postMessage('sent from worker 1');
}, 1000);
};
然后在第二个 worker 中,您可以保存传入端口对象,并响应在其上收到的消息。
self.onconnect = function(e) {
var port = e.ports[0];
port.onmessage = function(e) {
var worker1Port = e.data.worker1Port;
worker1Port.onmessage = function(e) {
console.log('received in worker 2', e.data);
};
};
};
你可以在 http://plnkr.co/edit/XTOej1b1PHfWuC9LHeZc?p=preview 看到这个工作
关于javascript - 从 SharedWorker 向 SharedWorker 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30700295/
MDN Documentation on SharedWorkers状态: The SharedWorker interface represents a specific kind of worke
我需要做一些繁重的工作,发现重新格式化整个代码有点乏味,并且想知道“SharedWorkers 可以使用其他共享工作人员的全局变量吗?”。 如果可以的话,有人可以做一个简单的演示吗?我对 Shared
假设我的 html 文件来自 http://foo.com/index.html ,其中有一个标记为http://bar.com/bar.js 。在 bar.js 中,我想启动一个 SharedWor
我曾与 Worker objects before 合作过,而且非常简单,尤其是教程。 所以下一步自然是 work with SharedWorkers 。我已经把它记下来了,但现在 SharedWo
互联网上有很多关于 SharedWorker 和 StackOverflow 的讨论和教程,但没有一个真正实现了最基本的目标——在两个共享 Worker 之间直接传递数据。 对我来说,SharedWo
在 Chrome 和 Firefox 中 const myWorker = new SharedWorker( "sharedWorkerChat.js" ); const port
使用给定的 tsconfig.json, { "compilerOptions": { "lib": ["es2015", "dom"] }, "files": [
我正在对 HTML5 Web Worker 进行一些研究。我让“普通”工作人员运行良好,但是我似乎无法初始化 SharedWorker。我已经在最新版本的 Chrome 和 Firefox 中尝试过,
我想创建一个 SharedWorker,如一本优秀书籍的一章所述:https://github.com/getify/You-Dont-Know-JS/blob/master/async%20%26%
SharedWorker 使用 Message Port 与 ParentWorker 交换消息。 父工 var port = new SharedWorker('/worker.js').port;
我用纯 JS 创建了一个简单的共享工作程序演示,我决定看看是否可以将其更改为 TS 项目,但从一开始我就遇到了一个问题,我不确定它是否与d.ts 文件或其他文件。 我已经安装了@types/share
使用 new Worker("whatever.js") 生成 WebWorker 工作正常,但 new SharedWorker("whatever.js") 返回错误:ReferenceError
将 SharedWorker 添加到 @angular/cli >1.2 生成的项目的具体步骤是什么。我希望 SharedWorker 在 TypeScript 中定义(具有完整/正确的类型定义编辑器
为什么 Safari 放弃了对 SharedWorker 的支持? 是否有任何有效的 polyfill 使用例如 localStorage 和 StorageEvent 作为通信端口? (是的,shi
在我见过的所有例子中,它们都与此类似 onconnect = function(e) { var port = e.ports[0]; port.onmessage = functio
我正在尝试在 SharedWorker 中实现服务器发送事件 (SSE)。 实现在谷歌浏览器中没有问题。但是,它在 FireFox 中根本不起作用。 当我尝试让它在 FireFox 中运行时,我在控制
我试图让每个在我的应用程序上打开多个选项卡的用户只保持一个连接事件,该应用程序使用 Pusher 和 Laravel Echo,我能够按照下面的文章和示例项目让它在测试项目上工作。 https://b
我是一名优秀的程序员,十分优秀!