这篇文章是我将回答的问题,因为我已经搜索了高低以找到答案。它非常基础——就像你在 JavaScript 中创建 SharedWorker 时所能得到的一样基础。
我遇到了一个奇怪的问题,我花了几个小时才解决。这只是为了让一个基本的(真正的)SharedWorker 向窗口发布消息。
现在,在我正在使用的代码中
...
var port = event.source
...
博客文章/教程中的其他所有内容都是非常标准的。
为什么这行不通?
这篇文章是我将回答的问题,因为我已经搜索了高低以找到答案。它非常基础——就像你在 JavaScript 中创建 SharedWorker 时所能得到的一样基础。
我遇到了一个奇怪的问题,我花了几个小时才解决。这只是为了让一个基本的(真正的)SharedWorker 向窗口发布消息。
现在,在我正在使用的代码中
...
var port = event.source
...
博客文章/教程中的其他所有内容都是非常标准的。
为什么这行不通?
回答:
我最初是从博客“ http://net.tutsplus.com/tutorials/javascript-ajax/getting-started-with-web-workers/ ”开始做一个你好 SharedWorker 的例子。不要只使用这篇文章!!!
唯一让我退缩的问题是那个博客“ var port = event.source
”——这是无效的!
使用var port = event.ports[0]
。
PS。Shared Workers 没有window object
so alert
,console.log
等将不起作用。
工作代码:
索引.html:
`<div>
<b>Welcome :)</b>
</div>
<script src="/js/main.js"></script>`
主.js:
var WorkerIO = new SharedWorker('/js/worker.io.js', 'NDN-Worker');
console.log('WorkerIO:', WorkerIO);
WorkerIO.port.addEventListener('message', function(eventM){
console.log('OnMessage:', eventM);
}, false);
WorkerIO.port.start();
WorkerIO.port.postMessage('This is a message from the client!');
WorkerIO.port.addEventListener('error', function(e){
throw new Error('WorkerIO Error: could not open SharedWorker', e);
}, false);
//importScripts();
Worker.io.js:
var ports = [];
self.addEventListener('connect', function(eventC){
'use strict';
ports = eventC.ports;
var port = ports[0];
port.postMessage('WorkerIO: connected');
console.log('o************ OnConnect ************o\n\n'
, '\t ports:', ports, '\n'
, '\t port:', port, '\n'
);
port.addEventListener('message', function(eventM){
var data = eventM.data;
console.log('o************ OnMessage ************o\n\n'
, '\t data:', data, '\n'
);
port.postMessage('from "clientPort": ' + clientPort.toString() + ', with love :)');
}, false);
port.start();
}, false);
快乐编码:)