Обработка сообщения от Webworker, созданного недоступным кодом

Я действительно новичок в JavaScript, извините, если ответ очевиден.

Я хочу отправить сообщение в главную ветку от веб-работника. У меня нет доступа к той части кода, которая создает работника, поэтому я не могу просто добавить worker.onmessage = [...], У меня есть доступ к коду JavaScript, который выполняется в начале моего процесса, но не тот, который создает рабочих.

Мне было интересно, если есть способ сделать что-то вроде window.onEveryMessageFromAnyWorker = doSomeMagic()

Большое спасибо!

1 ответ

Решение

Нет, это невозможно. Вам нужен дескриптор для веб-работника, чтобы слушать его сообщения. Убедитесь, что вы действительно не можете изменить код, который делает работника, если вы не можете прочитать ниже:

Хакерское решение

Если вы пишете usercript или другой "хакерский" код, я предлагаю вам переопределить рабочий конструктор:

// 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 имущество.

Другие вопросы по тегам