2017-07-19 2 views
15

Imaginez que j'ai un script asmjs mais avant d'exécuter le script, j'aimerais tester et voir si le navigateur supporte asm.js ou pas. Si c'est false, affichez un message indiquant que le navigateur est vieux ou quelque chose comme ça, sinon, exécutez le script.Comment tester la disponibilité de asm.js dans un navigateur Web?

Pouvons-nous utiliser l'idée de "use asm" pour détecter si un navigateur Web supporte asm.js?

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

Peut-être pas faisable https://github.com/kangax/compat-table/issues/447 –

+0

Pourquoi voudriez-vous détecter cela? Il peut courir un peu plus lentement s'il n'est pas supporté. –

+0

@Jonasw pensez-vous que cela fonctionnera même si le navigateur ne supporte pas ArrayBuffer par exemple? –

Répondre

4

La triste situation est qu'il ne semble pas y avoir de moyen vraiment fiable pour détecter le support du navigateur de asm.js.

L'exécution de ce segment produira une erreur, mais pas un capturables:

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."); 
 
}

C'est l'un de ces cas, vous avez à contrecoeur de se tourner vers la vérification de la chaîne client, peut-être combiné avec autre fonctionnalité de vérification à determine which browser and version vous avez affaire.

Lorsque cette information est obtenue alors consultez cette liste qui suit les navigateurs et les supports (versions courtesy of caniuse.com) asm.js, à compter de cette date:

numéro de version est depuis et y compris - J'inclus dans les navigateurs aussi très petites bases d'utilisateurs, car les informations disponibles pour ces derniers aussi bien:

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 ne supporte pas la compilation en avant-Of-temps, mais la performance a doublé dans Chrome 28"