Tình huống đáng buồn là dường như không có cách nào thực sự đáng tin cậy để phát hiện hỗ trợ trình duyệt của asm.js.
Chạy phân khúc này sẽ tạo ra một lỗi, nhưng không phải là một catchable một:
try {
(function MyAsmModule() {"use asm"})();
console.log("asm.js OK");
// Now, hit F12 to open the browser console just to find a TypeError that states:
// "asm.js type error: expecting return statement"
}
catch(err) {
// will never show...
console.log("asm.js not supported.");
}
Đây là một trong những trường hợp đó bạn bất đắc dĩ phải chuyển sang kiểm tra chuỗi khách hàng, có lẽ kết hợp với tính năng kiểm tra khác để determine which browser and version bạn đang xử lý.
Khi thông tin được thu được sau đó kiểm tra danh sách này mà sau trình duyệt và phiên bản hỗ trợ (courtesy of caniuse.com) asm.js, tính đến ngày này:
Version số là kể từ và bao gồm - Tôi cũng bao gồm trình duyệt với rất căn cứ sử dụng nhỏ như các thông tin đã có sẵn cho các cũng như:
Firefox : v. 22
Chrome : v. 28 (*)
Edge : v. 13
Opera : v. 15 (*)
Android browser : v. 56 (*)
Opera mobile : v. 37 (*)
Chrome for Android : v. 59 (*)
Firefox for Android : v. 54
Samsung internet : v. 5 (*)
QQ browser : v. 1.2 (*)
Baidu browser : v. 7.12 (*)
(*): "Chrome không hỗ trợ Ahead-Of-Time biên soạn nhưng hiệu suất tăng gấp đôi trong Chrome 28"
Có thể không doable https://github.com/kangax/compat-table/issues/447 –
Tại sao bạn muốn phát hiện điều đó? Nó có thể chạy chậm hơn một chút nếu nó không được hỗ trợ. –
@ Jonasw bạn có nghĩ rằng nó sẽ hoạt động ngay cả khi trình duyệt không hỗ trợ ArrayBuffer chẳng hạn? –