WebAssembly'ın tüm yeni ana tarayıcılara gelmesiyle ilgili destekle, web sitemi ziyaret eden mevcut tarayıcının bunu destekleyip desteklemediğini nasıl kontrol edebilirim?Bir tarayıcının WebAssembly destekleyip desteklemediğini nasıl kontrol edebilirim?
5
A
cevap
6
Eğer WebAssembly varlığını tespit edebilen birkaç yolu vardır. Temel olan, 'un global kapsamda "object"
türünde olup olmadığını kontrol etmektir, ancak "genel kapsam" farklı JavaScript ortamlarında (ana tarayıcı iş parçacığı, çalışan, node.js) almak için zor bir şeydir.
Bunu yapmak teknik olarak yeterli değildir, çünkü WebAssembly desteğine sahip olabilirsiniz, ancak CSP (ve tam olarak ne için CSP izinlerinin standartlaştırılmadığı) nedeniyle gerçekten derleyemez veya başlatamazsınız. aşağıdaki gibi
bir muhafazakar çek olabilir:
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");
O yapar: geçerli kapsamda erişilebilir
- kontrol
WebAssembly
olsun. Küresel değilse gerçekten umursamıyoruz! - biz aslında burada kullanmayın ama asenkron çünkü hangi aslında örneğini kullanmak isterdim ve ana iş parçacığı veya kapalı büyük modüller işleyebilir
.instantiate
işlevi olup olmadığını bakın. - Mümkün olan en küçük modülü (sihirli sayı
'\0', 'a', 's', 'm'
ve bunu takibenuint32
olarak kodlanmış sürüm numarası 1) eşzamanlı olarak derlemeye çalışın ve birWebAssembly.Module
çıktısına bakın. - Son olarak, bu modülü eşzamanlı olarak başlatmayı deneyin ve bunun bir
WebAssembly.Instance
olduğunu doğrulayın.
Bu biraz fazla ama ne olursa olsun çalışması gerekir: kodu (ana iş parçacığı, işçi, node.js) çalıştıran yerlerde
- .
- CSP nasıl standart hale getirilir.
Muhtemelen 'TRUE değil, örneğini dönmek istiyorum. –
@AndreasRossberg 'instanceof', –
@AyushGupta 'yı döndüren bir operatördür, oh, haklısınız, çünkü pencere kenarlığı tarafından mükemmel bir şekilde kesildiği için eksiktim. –