Как загрузить модуль wasm локально? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать простую автономную (только файл. html и файл .wasm) автономную визуализацию данных, использующую JavaScript и WebAssembly. Однако у меня возникают проблемы при загрузке модуля WASM из локального файла.

Первая проблема - это CORS. Попытка загрузить любой модуль JS с относительным или file:// URL приводит к ошибкам безопасности. На Firefox мне удалось отключить локальный CORS, но это неприглядно и чрезмерно допустимо. На Chrome мне нужно запустить браузер с флагами. Оба они не начальные с точки зрения пользователя. Есть ли способ загрузить модули JS или WASM из локального файла без проблем с CORS?

Обходя CORS, вторая проблема заключается в том, что, хотя Firefox способен загружать JS модули, он не работает с модулем WASM: (мое фактическое сообщение об ошибке на японском, но я думаю, что это Engli sh one) «Загрузка не удалась для« .wasm »с источником». Никакой дополнительной информации не отображается. На Chrome появляется сообщение об ошибке: «Не удалось загрузить скрипт модуля: сервер ответил не с типом JavaScript MIME" ". Строгая проверка типов MIME применяется для скриптов модулей согласно HTML spe c. ', Что предполагает, что оба браузера могут страдать от невозможности угадать тип MIME.

Обе эти проблемы будут решены путем настройки HTTP-сервера, но это полностью противоречит цели иметь простой, автономный файл / файлы, для работы которых требуется только браузер.

Существует ли способ загрузки и вызова WASM только с локальным файлы

1 Ответ

0 голосов
/ 27 апреля 2020

Вы можете встроить двоичный файл Wasm как Uint8Array и создать его таким образом. Это работает только если он достаточно мал, хотя. Я полагаю, вы получите ошибку, если значение Wasm превышает 4 КБ.

// your Wasm file as a Uint8Array
const wasmSourceCode = new Uint8Array([0, 97, 115, 109 ...]);
const wasmModule = new WebAssembly.Module(wasmSourceCode );
const wasmInstance = new WebAssembly.Instance(wasmModule);
...