support fit content browser webassembly

browser - fit - html5 compatibility



¿Cómo puedo verificar si un navegador es compatible con WebAssembly? (1)

Hay algunas formas en que puede detectar la presencia de WebAssembly. El básico es verificar si WebAssembly es del tipo "object" en el alcance global, pero el "alcance global" es una cosa difícil de obtener en diferentes entornos de JavaScript (hilo principal del navegador, worker, node.js).

Tampoco es técnicamente suficiente hacerlo porque podría tener soporte de WebAssembly pero no poder compilar o crear instancias en realidad debido a la CSP (y lo que CSP no permite aún no está estandarizado, continúe trabajando here ).

Un cheque conservador podría ser el siguiente:

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

Hace lo siguiente:

  • Compruebe si WebAssembly es accesible en el ámbito actual. ¡Si no es global no nos importa!
  • .instantiate si tiene la función .instantiate , que en realidad no usamos aquí, pero que querría usar cuando realmente se crea una instancia porque es asíncrono y puede manejar grandes módulos en el hilo principal o desactivado.
  • Intente compilar sincrónicamente el módulo más pequeño posible (número mágico ''/0'', ''a'', ''s'', ''m'' , seguido de la versión número 1 codificada como uint32 ), y vea si obtenemos un WebAssembly.Module out of eso.
  • Finalmente, intente crear una instancia síncrona de ese módulo y verifique que se trata de un WebAssembly.Instance .

Esto es un poco demasiado pero debería funcionar independientemente de:

  • Donde se ejecuta el código (hilo principal, trabajador, node.js).
  • Cómo CSP termina siendo estandarizado.

Con la compatibilidad con WebAssembly en todos los nuevos navegadores principales, ¿cómo puedo comprobar si el navegador actual que visita mi sitio web lo admite?