2017-07-19 19 views
15

Hãy tưởng tượng tôi có tập lệnh asmjs nhưng trước khi chạy tập lệnh, tôi muốn kiểm tra xem liệu trình duyệt có hỗ trợ asm.js hay không. Nếu đó là false, hiển thị thông báo cho biết trình duyệt cũ hoặc tương tự như vậy, nếu không, hãy thực thi tập lệnh.Làm cách nào để kiểm tra tính khả dụng của asm.js trong trình duyệt web?

Chúng tôi có thể sử dụng ý tưởng "use asm" bằng cách nào đó để phát hiện xem trình duyệt web có hỗ trợ asm.js không?

function MyAsmModule() { 
    "use asm"; 
    // module body 
} 
+4

Có thể không doable https://github.com/kangax/compat-table/issues/447 –

+0

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

+0

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

Trả lời

4

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ác vấn đề liên quan