2017-12-19 121 views

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 takiben uint32 olarak kodlanmış sürüm numarası 1) eşzamanlı olarak derlemeye çalışın ve bir WebAssembly.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.
+0

Muhtemelen 'TRUE değil, örneğini dönmek istiyorum. –

+1

@AndreasRossberg 'instanceof', –

+0

@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. –

İlgili konular