2017-12-19 124 views
5

सभी नए प्रमुख ब्राउज़रों में आने वाले WebAssembly के समर्थन के साथ, मैं कैसे जांच सकता हूं कि वर्तमान ब्राउज़र जो मेरी वेबसाइट पर जा रहा है, इसका समर्थन करता है या नहीं?मैं कैसे जांच सकता हूं कि कोई ब्राउज़र WebAssembly का समर्थन करता है या नहीं?

उत्तर

6

कुछ तरीके हैं जिन्हें आप WebAssembly की उपस्थिति का पता लगा सकते हैं। बुनियादी बात यह है कि WebAssembly वैश्विक दायरे में "object" टाइप करने के लिए जांचना है, लेकिन "वैश्विक स्कोप" विभिन्न जावास्क्रिप्ट वातावरण (मुख्य ब्राउज़र थ्रेड, कार्यकर्ता, node.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 है।

इसमें कुछ समय में ज्यादा है, लेकिन की परवाह किए बिना काम करना चाहिए: जहां कोड (मुख्य थ्रेड, कार्यकर्ता, Node.js) चल रहा है

  • कैसे सीएसपी मानकीकृत होने के समाप्त होता है।
+0

शायद आप 'सत्य' वापस करना चाहते हैं, उदाहरण के लिए नहीं। –

+1

@AndreasRossberg 'instanceof' एक ऑपरेटर है जो बूलियन –

+0

@ आयुषगुप्त लौटाता है, ओह, आप सही हैं, मुझे याद आ रही थी क्योंकि यह खिड़की सीमा से पूरी तरह से काटा गया था। –

संबंधित मुद्दे

 संबंधित मुद्दे