gpt4 book ai didi

javascript - 处理来自由无法访问的代码创建的 Webworker 的消息

转载 作者:行者123 更新时间:2023-12-03 07:08:00 24 4
gpt4 key购买 nike

我对 JavaScript 很陌生,如果答案很明显,我很抱歉。

我想从网络 worker 向主线程发送消息。我无权访问创建工作人员的代码部分,因此我不能仅添加 worker.onmessage = [...]。我可以访问在进程开始时执行的 JavaScript 代码,但不能访问创建工作线程的代码。

我想知道是否有办法做类似 window.onEveryMessageFromAnyWorker = doSomeMagic()

非常感谢!

最佳答案

不,这是不可能的。您需要 Web Worker 的句柄才能监听其消息。如果您无法阅读以下内容,请确保您确实无法更改创建工作程序的代码:

黑客解决方案

如果您正在编写用户脚本或其他“hacky”代码,我建议您重写工作构造函数:

// Execute this before the worker is being created
window.OldWorker = Worker;
window.Worker = function(path) {
console.log("Worker created: ", path);
// The original worker is applied on this object
return new OldWorker(path);
}

请注意,这是一段令人讨厌的代码。它可能会破坏东西。

获得此代码后,您可以访问创建的工作线程:

window.Worker = function(path) {
console.log("Worker created: ", path);
var worker = new OldWorker(path);
if(path == "something.js") {
// do something
worker.addEventListener("message", (e)=>{console.log("Message:", e.data});
}
// The original worker is applied on this object
return worker;
}

请注意,您必须使用worker.addEventListener。设置 .onmessage 可能会导致您的回调被覆盖,因为 onmessage 属性中只能有一个回调。

关于javascript - 处理来自由无法访问的代码创建的 Webworker 的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36728067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com