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

Process message from Webworker created by unreachable code

我真的是 JavaScript 的新手,如果答案很明显,我很抱歉。

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

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

的事情

非常感谢!

不,那不可能。您需要 Web Worker 的句柄才能收听其消息。如果您无法阅读以下内容,请确保您确实无法更改构成 worker 的代码:

Hacky 解决方案

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

// 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 属性.

中只能有一个回调