您可以通过服务工作者(甚至在 Github Pages 上)设置所需的 COOP 和 COEP 标头来使SharedArrayBuffer工作。这篇博文将解释基础知识并向您展示如何操作。
本质上,这个想法是
- 当页面第一次加载时,我们注册worker
- 然后我们重新加载页面
- 最后,既然工作人员正在控制一切,现在每个请求都将设置适当的标头
执行此操作的服务人员必须包含以下内容
// sw.js
self.addEventListener("fetch", function (event) {
if (event.request.cache === "only-if-cached" && event.request.mode !== "same-origin") {
return;
}
event.respondWith(
fetch(event.request)
.then(function (response) {
const newHeaders = new Headers(response.headers);
newHeaders.set("Cross-Origin-Embedder-Policy", "require-corp");
newHeaders.set("Cross-Origin-Opener-Policy", "same-origin");
const moddedResponse = new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders,
});
return moddedResponse;
})
.catch(function (e) {
console.error(e);
})
);
});
我刚刚创建了一个小型库以使其更容易:coi-serviceworker。