您可以使用fetch()
, response.blob()
创建一个Blob URL
类型的application/javascript
从返回的Blob
; set SharedWorker()
参数为Blob URL
由...制作URL.createObjectURL()
;利用window.open()
, load
新开业活动window
定义相同SharedWorker
先前在原始定义window
, 附message
事件到原始SharedWorker
在新开的window
s.
javascript
被尝试过console
at 如何从另一个 iFrame 中清除 iFrame 的内容,其中当前问题 URL 应在新位置加载tab
with message
从开放window
通过worker.port.postMessage()
事件处理程序记录于console
.
Opening window
还应该记录message
从新打开的位置发布时发生的事件window
using worker.postMessage(/* message */)
,同样在打开时window
window.worker = void 0, window.so = void 0;
fetch("https://cdn.rawgit.com/viziionary/Nacho-Bot/master/webworker.js")
.then(response => response.blob())
.then(script => {
console.log(script);
var url = URL.createObjectURL(script);
window.worker = new SharedWorker(url);
console.log(worker);
worker.port.addEventListener("message", (e) => console.log(e.data));
worker.port.start();
window.so = window.open("https://stackoverflow.com/questions/"
+ "38810002/"
+ "how-can-i-load-a-shared-web-worker-"
+ "with-a-user-script", "_blank");
so.addEventListener("load", () => {
so.worker = worker;
so.console.log(so.worker);
so.worker.port.addEventListener("message", (e) => so.console.log(e.data));
so.worker.port.start();
so.worker.port.postMessage("hi from " + so.location.href);
});
so.addEventListener("load", () => {
worker.port.postMessage("hello from " + location.href)
})
});
At console
在任一tab
然后你可以使用,例如;在如何从另一个 iFrame 中清除 iFrame 的内容 worker.postMessage("hello, again")
at new window
当前 URL 的如何使用用户脚本加载共享 Web Worker?, worker.port.postMessage("hi, again");
where message
每个附有的事件window
, 两者之间的通信window
s 可以使用原始的来实现SharedWorker
在初始 URL 处创建。