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模式吗?
在此提交中有意从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应用程序可能就足够了。
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在您的项目中。
| 归档时间: |
|
| 查看次数: |
3381 次 |
| 最近记录: |