Блазор в Internet Explorer - PullRequest
       32

Блазор в Internet Explorer

0 голосов
/ 26 ноября 2018

Я пытаюсь запустить приложение Blazor в Internet Explorer.На странице Blazor написано, что есть резервный вариант в asm.js для браузеров без поддержки веб-сборки.Но когда я загружаю страницу в IE (со связанным скриптом blazor.pollyfil.js), я просто получаю сообщение об ошибке «Браузер не поддерживает WebAssembly».

Я могу запустить приложение в режиме сервера (соединение SignalR ссервер рендеринга), но это решение для всех браузеров, и основное преимущество (WebAssembly) исчезает.

Есть ли способ как правильно вернуться в режим asm.js в (только) Internet Explorer?

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Похоже, что другие пользователи также сталкиваются с этой проблемой.

Этот пользователь обнаружил, что проблема связана с полифиллами (и, конечно, с Internet Explorer 11), и это происходит с babel / core-js и другимисовместимые полифилы.

Похоже, что у IE11 есть некоторые трудности с глубокой рекурсией сеттера на Symbol, и он получает ошибку превышения памяти стека.

он также пытается исправить полифилл.Вы можете попытаться выполнить тест, чтобы проверить, поможет ли это решить вашу проблему или нет.

Ссылка:

Откат asm.js не работает на IE11

Полифилы для Blazor (для поддержки Internet Explorer 11 и некоторых других браузеров)

0 голосов
/ 15 мая 2019

Поддержка asm.js была преднамеренно удалена из Blazor в этом коммите: https://github.com/aspnet/Blazor/commit/4006cd543900fcc1cf76cd75a1b24007e60c8a67.Если я правильно понимаю, для получения поддержки asm.js из стандартной версии Blazor потребуется запустить моно-проект, включив сборку asm.js в свой двоичный дистрибутив, а для проекта Blazor добавить его обратно в свой инструмент сборки / развертывания.

Я не пробовал, но, возможно, можно создать моно для asm.js самостоятельно и добавить его в ваше встроенное приложение Blazor как часть вашего собственного процесса развертывания.

Если я правильно понимаю,Blazor по-прежнему работает в интерпретируемом режиме mono, поэтому дополнения сборки моно wasm файлом asm.js все же может быть достаточно.Если в будущем Blazor перейдет к фактической компиляции сборок непосредственно в wasm, все станет еще сложнее.

Альтернативы

Blazor поддерживает режим хостинга на стороне сервера .Вы уже упоминали об этом в своем вопросе, но я обсуждаю это здесь на случай, если другие пропустят это.В режиме хостинга на сервере клиенту нужно только иметь возможность запускать «традиционный» JavaScript (хотя для этого могут потребоваться полифилы).Это можно сделать для работы в IE11 и других клиентах, которым не хватает поддержки wasm.Конечно, это требует больше ресурсов на сервере, не позволяет клиенту поддерживать автономные сценарии и в основном похоже на прославленный сеанс telnet.Но этого может быть достаточно для приложений LOB .

0 голосов
/ 26 ноября 2018

WebAssembly не входит в Функции Internet Explorer .Вы можете узнать о совместимости браузера на mozilla.org , но нет, IE не поддерживает WebAssembly.

enter image description here

Помните IE больше не поддерживается, но все еще поддерживается:

Будет ли Internet Explorer 11 продолжать получать обновления?

Последние функции и обновления платформы будутбыть доступным только в Microsoft Edge.Мы продолжим выпускать обновления безопасности для Internet Explorer 11 в течение поддерживаемого срока его службы.Чтобы обеспечить согласованное поведение в разных версиях Windows, мы будем оценивать ошибки Internet Explorer 11 для обслуживания в каждом конкретном случае.

Переход с WebAssembly на режим компонентов - это всего лишь несколько строк кода, но это странноразвернуть оба режима, чтобы сохранить совместимость для IE.Помните, что Blazor экспериментален, я полагаю, что для реального развертывания вам следует подождать некоторое время ... время для обновления с IE на какой-либо другой браузер.

Есть ли действительно способ, как правильно вернуться кРежим asm.js в (только) Internet Explorer?

Я думаю, это тот же вопрос, что и «Как я могу проверить, поддерживает ли браузер WebAssembly?» Просто настройте anwser дляBlazor:

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;
})();

var script = document.createElement('script');
script.src = (supported)?
             "_framework/blazor.server.js":
             "_framework/blazor.webassembly.js";

Не забудьте включить оба js в ваш проект.

...