我对JavaScript很新,如果答案显而易见,我很抱歉。
我想从网络工作者向主线程发送消息。我无法访问创建工作人员的代码部分,因此我无法添加goog.provide/goog.require
。我可以访问在我的流程开始时执行的JavaScript代码,但不能访问创建工作者的代码。
我想知道是否有办法做worker.onmessage = [...]
非常感谢!
答案 0 :(得分:1)
不,那是不可能的。您需要Web worker的句柄才能侦听其消息。如果您无法在下面阅读,请确保您确实无法更改构成工作人员的代码:
如果您正在编写用户或其他" 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
属性中只能有一个回调。