【发布时间】:2021-04-25 20:21:39
【问题描述】:
我无法让网络工作者发布消息(使用 Webpack)。
第一次尝试
我有一个 Rails 应用程序,其中包含 webworker 的入口点和主线程 Javascript 的入口点。
我在这里只使用本机 WebWorker api。创建了一个单独的文件,仅供 Webworker 使用。
webworker 代码被编译成它自己的文件。文件下载没有问题。网络标签显示它加载了 200。
worker = new Worker(workerUrl);
// url points to the worker's URL
// I get the URL with `asset_pack_url('worker.js')`
// resolves to something like http://localhost:5000/packs/worker-aaa739e5a169b00de74b.js
// I can navigate to this file and see it..
编译后的工作文件有一些 Webpacker 的东西,但主要部分看起来像这样...... 很简单
self.onmessage = function runParser(_e) {
var x = 'a test value';
self.postMessage(x);
};
在主线程中..
worker = new Worker(workerUrl);
worker.postMessage('test');
worker.onmessage = () => {
alert('contact made with the other side');
}
但是没有消息发送。警报永远不会触发。什么都没有发生。
第二次尝试
根据 Webpack 文档,不需要加载器..
https://webpack.js.org/guides/web-workers/#root
另外,我可以将它指向一个本地文件,而不是将 WebWorker 指向一个 URL。
new Worker(new URL('./worker.js', import.meta.url));
结果...
Security Error: Content at http://localhost:5000/@stoplion/ea-ut-eum-at may not load data from file:///Users/geo/Code/My Project/my-app/app/client/src/workers/worker.
【问题讨论】:
-
FF 说:“Uncaught TypeError: Worker.postMessage: 0 is not a valid argument count for any overload.” 你必须至少将消息传递给@987654328 @.
-
即使传递了一个参数也没有任何反应
-
现在编辑后,worker 必须保存在(本地?)服务器上,您无法使用文件协议从本地磁盘的任何位置加载 worker。
-
我实际上正在尝试两种方式。从 URL 加载和此处的说明webpack.js.org/guides/web-workers/#root。我猜第二个,Webpack 正在做某事(使它成为 Blob?)。在第一次尝试(URL)中,什么都没有发生,没有错误,什么也没有。在第二次尝试中,我得到一个错误。
标签: javascript ruby-on-rails web-worker webpacker