Internet Explorer中的Blazor

Fan*_*nda 7 internet-explorer webassembly blazor

我正在尝试在Internet Explorer中运行blazor应用程序。在blazor页面上写的是对不支持webassembly的浏览器的asm.js的备用。但是,当我在IE中加载页面时(链接了blazor.pollyfil.js脚本),我只会收到错误消息“浏览器不支持WebAssembly”。

我可以在服务器模式下运行应用程序(与渲染服务器的SignalalR连接),但是它是所有浏览器的解决方案,主要优点(WebAssembly)消失了。

真的有办法正确地(仅)在Internet Explorer中回到asm.js模式吗?

bin*_*nki 6

在此提交中有意从Blazor中删除了对asm.js的支持:https : //github.com/aspnet/Blazor/commit/4006cd543900fcc1cf76cd75a1b24007e60c8a67。如果我理解正确,那么从库存blazor获得asm.js支持将需要mono项目开始在其二进制发行版中包含asm.js构建,并且Blazor项目必须将其添加回其build / deploy工具中。

我没有尝试过,但是您可以自己为asm.js构建mono,并将其作为自己的部署过程的一部分注入到内置的Blazor应用程序中。

如果我正确理解,Blazor仍将使用mono的解释模式运行,因此用asm.js补充mono的wasm构建可能仍然足够。如果Blazor在将来转换为直接将组件实际编译为wasm,事情将会变得更加复杂。

备择方案

Blazor支持服务器端托管模式。您已经在问题中提到了这一点,但是我在这里讨论是为了防止其他人跳过。在服务器托管模式下,客户端仅需要能够运行“传统” JavaScript(尽管它可能需要polyfill)。可以使它在IE11和其他缺少wasm支持的客户端中正常工作。当然,这会占用服务器上的更多资源,阻止客户端支持脱机方案,并且基本上就像是美化的telnet会话。但这对于LOB应用程序可能就足够了。


dan*_*era 3

WebAssembly 不包含在Internet Explorer 功能中。您可以在 mozilla.org 了解浏览器兼容性,但 IE 不支持 WebAssembly。

在此输入图像描述

请记住 IE 已停产,但仍保留

Internet Explorer 11 会继续接收更新吗?

最新功能和平台更新仅在 Microsoft Edge 中提供。我们将在 Internet Explorer 11 受支持的生命周期内继续为其提供安全更新。为了确保跨 Windows 版本的行为一致,我们将根据具体情况评估 Internet Explorer 11 的错误以提供服务。

从 WebAssembly 更改为组件模式只需几行更改代码,但部署这两种模式以保持 IE 的兼容性似乎很奇怪。请记住 Blazor 是实验性的,我想对于真正的部署,您应该等待一段时间......从 IE 更新到其他浏览器的时间。

是否真的有办法在(仅)Internet Explorer 中正确回退到 asm.js 模式?

我想与“如何检查浏览器是否支持 WebAssembly?”是同一个问题。,只需调整 Blazor 的答案即可:

const isClientSideWebAssemblySupported = (() => {
    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 = (isClientSideWebAssemblySupported)?
             "_framework/blazor.server.js":
             "_framework/blazor.webassembly.js";
Run Code Online (Sandbox Code Playgroud)

请记住将两者都包含js在您的项目中。