Обработка сообщения от 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
имущество.