WebAssemblyのサポートがすべての新しい主要ブラウザーに導入されたので、私のWebサイトにアクセスしている現在のブラウザーがそれをサポートしているかどうかを確認するにはどうすればよいですか?
WebAssemblyの存在を検出する方法はいくつかあります。基本的な方法は、グローバルスコープで"object"
型のWebAssembly
であるかどうかを確認することですが、「グローバルスコープ」は異なるJavaScript環境(メインブラウザースレッド、ワーカー、ノード.js)。
また、WebAssemblyをサポートすることはできますが、実際にはコンパイルまたはインスタンス化できないため、これを行うことは技術的に十分ではありません [〜#〜] csp [〜#〜] まだ標準化され、進行中の作業 ここ )。
保守的なチェックは次のようになります。
const supported = (() => {
try {
if (typeof WebAssembly === "object"
&& typeof WebAssembly.instantiate === "function") {
const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));
if (module instanceof WebAssembly.Module)
return new WebAssembly.Instance(module) instanceof WebAssembly.Instance;
}
} catch (e) {
}
return false;
})();
console.log(supported ? "WebAssembly is supported" : "WebAssembly is not supported");
次のことを行います。
WebAssembly
が現在のスコープでアクセス可能かどうかを確認します。グローバルでない場合、私たちはあまり気にしません!.instantiate
関数があるかどうかを確認します。ここでは実際には使用しませんが、非同期であり、メインスレッドまたはオフで大きなモジュールを処理できるため、実際にインスタンス化するときに使用します。'\0', 'a', 's', 'm'
に続いてuint32
としてエンコードされたバージョン番号1)を同期コンパイルし、WebAssembly.Module
が得られるかどうかを確認してください。WebAssembly.Instance
であることを確認してください。これは少し多くなりますが、以下に関係なく動作するはずです。