Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Browser 如何检查浏览器是否支持WebAssembly?_Browser_Webassembly - Fatal编程技术网

Browser 如何检查浏览器是否支持WebAssembly?

Browser 如何检查浏览器是否支持WebAssembly?,browser,webassembly,Browser,Webassembly,随着所有新的主流浏览器都支持WebAssembly,我如何检查访问我的网站的当前浏览器是否支持它?有几种方法可以检测WebAssembly的存在。基本的方法是检查WebAssembly是否在全局范围内属于类型的“object”,但在不同的JavaScript环境(主浏览器线程、worker、node.js)中,“全局范围”是一件棘手的事情 这样做在技术上也是不够的,因为您可能有WebAssembly支持,但无法实际编译或实例化,因为(CSP不允许的内容尚未标准化,工作仍在进行中) 保守检查可如下

随着所有新的主流浏览器都支持WebAssembly,我如何检查访问我的网站的当前浏览器是否支持它?

有几种方法可以检测WebAssembly的存在。基本的方法是检查
WebAssembly
是否在全局范围内属于
类型的“object”
,但在不同的JavaScript环境(主浏览器线程、worker、node.js)中,“全局范围”是一件棘手的事情

这样做在技术上也是不够的,因为您可能有WebAssembly支持,但无法实际编译或实例化,因为(CSP不允许的内容尚未标准化,工作仍在进行中)

保守检查可如下所示:

const-supported=(()=>{
试一试{
如果(WebAssembly的类型==“对象”
&&WebAssembly.instantiate的类型==“函数”){
const module=新的WebAssembly.module(Uint8Array.of(0x0、0x61、0x73、0x6d、0x01、0x00、0x00、0x00));
if(WebAssembly.module的模块实例)
返回WebAssembly.Instance的新WebAssembly.Instance(模块)instanceof WebAssembly.Instance;
}
}捕获(e){
}
返回false;
})();
console.log(支持?“支持WebAssembly”:“不支持WebAssembly”)(声誉不足,无法评论)
如果您在较旧的浏览器上进行测试,则不支持
()=>
语法,因此可以将其作为函数全部执行:

函数wasmSupported(){
//try/catch,返回false;如JF Bastien的回答
}
如果(wasmSupported()){…}

您可能希望返回
true
,而不是实例。@AndreasRossberg
instanceof
是一个返回boolean@AyushGupta,哦,你说得对,我错过了,因为它被窗户边缘完全切断了。一起做了一个快速测试,这个测试花了1毫秒,用棒球也比不上bat@GeorgeJempty我只是在JSBench上运行了它,我在Safari上至少得到了20倍,在Chrome上得到了6倍。如果它真的成为网络上的瓶颈,浏览器会对其进行优化。但是如果你在旧浏览器上测试,WebAssembly肯定不受支持?@pacukluka我假设在大多数情况下,
If
带有一个
else
,实际上是为了让最终用户知道网页出了什么问题。