要使用 SharedArrayBuffer
,我们需要添加两个响应头:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
是否有办法在GitHub Pages上添加这些标题,以便SharedArrayBuffer
可以正常工作?
要使用 SharedArrayBuffer
,我们需要添加两个响应头:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
是否有办法在GitHub Pages上添加这些标题,以便SharedArrayBuffer
可以正常工作?
SharedArrayBuffer
正常工作(即使在GitHub Pages上)。我创建了一个小型库coi-serviceworker,以便更轻松地完成此操作。该库基于指南Enabling COOP/COEP without touching the server,其中概述了以下所需步骤:
执行上述操作的服务工作线程必须包含类似以下内容的代码:
- 当页面第一次加载时,我们注册工作线程。
- 然后重新加载页面。
- 最后,现在该工作线程正在控制所有内容,因此每个请求现在都将设置适当的标头。
// 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);
})
);
});
crossOriginIsolated
永远不会为真,并且页面会持续重新加载。 - Pontiacks<script src="/static/js/coi-serviceworker.js"></script>
时,遇到了和我的网站完全相同的情况。问题出在URI上,需要在相同目录或更高目录中加载。所以将/static/js/coi-serviceworker.js
移动到根目录,并将src更改为coi-serviceworker.js
即可解决问题。 - nagataaaasnavigator.serviceWorker.ready.then(function(reg) { if (!crossOriginIsolated && !navigator.serviceWorker.controller) window.location.reload(); })
- chkas