というのも、簡単には使えないから・・・。
SharedArrayBuffer
SharedArrayBuffer - JavaScript | MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer
某Spectreの絡みでセキュリティ要件が厳しくなって、現世では簡単に使えなくなった。
https
であることはもちろんcrossOriginIsolated
なドキュメントである
これらの条件が満たされていないと、SharedArrayBuffer
を使うことはできない。というか、条件未達の場合SharedArrayBuffer
がそもそもグローバルに存在しない。
COI: Cross-origin isolated
Window: crossOriginIsolated property - Web APIs | MDN https://developer.mozilla.org/en-US/docs/Web/API/Window/crossOriginIsolated
この条件を満たすためには、HTTPヘッダーを付けてそのドキュメントを配信する必要がある。
Cross-Origin-Opener-Policy
:same-origin
Cross-Origin-Embedder-Policy
:require-corp
orcredentialless
なので、CloudflareとかNetlifyとか、カスタムヘッダーを自由に付けられる環境なら、まあ大した問題にはならない。
そのまんま_headers
に書いてそれを置けばいいので。
GitHub Pagesでは一手間いる
が、GitHub Pagesには、_headers
みたいな特別なファイルも、そういうGUIもない。ずっとない。
HTTP Headers (e.g. Content-Security-Policy) on Pages · community · Discussion #54257 https://github.com/orgs/community/discussions/54257
どうする・・・?というところで、救世主としてのこのライブラリ。
gzuidhof/coi-serviceworker: Cross-origin isolation (COOP and COEP) through a service worker for situations in which you can’t control the headers (e.g. GH pages) https://github.com/gzuidhof/coi-serviceworker
使い方は簡単なので割愛するけど、要はServiceWorkerを経由させることで、COI関連のヘッダーを自分で付与してしまおうという、ややハック的なやつ。 (なのでもしかするとなんかハマって動かないパターンもあるかもしれない)
が、シンプルなユースケースでは、問題なく動いてるように見える。
ちなみにこのライブラリは、
- 単一の
.js
ファイルになっていながら script
要素から読まれる使い方を想定しつつも- 自身をServiceWorkerとして
register()
させる
みたいな書き方を実現してて、なかなか興味深かった。
ここでoxc-parser
をGitHub Pagesで使うために利用してる。
localhost
での開発の場合は、Viteで簡単にヘッダー追加できるのでそっちで。