Internet Explorerでblazorアプリケーションを実行しようとしています。ブレザーページには、webassemblyサポートのないブラウザーのasm.jsへのフォールバックが記述されています。しかし、IE(blazor.pollyfil.jsスクリプトがリンクされている)でページをロードすると、「ブラウザはWebAssemblyをサポートしていません」というエラーが表示されます。
サーバーモード(レンダリングサーバーへのSignalR接続)でアプリケーションを実行できますが、これはすべてのブラウザーのソリューションであり、主な利点(WebAssembly)が消えます。
Internet Explorer(のみ)でasm.jsモードに正しくフォールバックする方法は本当にありますか?
WebAssemblyは Internet Explorerの機能 に含まれていません。 mozilla.orgでのブラウザの互換性 について学習できますが、IEはWebAssemblyをサポートしていません。
覚えているIE is 廃止されましたが、まだ維持されています:
Internet Explorer 11は引き続きアップデートを受信しますか?
最新の機能とプラットフォームの更新は、Microsoft Edgeでのみ利用できます。 Internet Explorer 11のサポートされている有効期間を通じて、引き続きセキュリティ更新プログラムを提供します。 Windowsバージョン全体で一貫した動作を保証するために、サービスごとにケースバイケースでInternet Explorer 11のバグを評価します。
WebAssemblyからコンポーネントモードへの変更は、ほんの数行のコード変更ですが、IEの互換性を維持するために両方のモードをデプロイするのはおかしいようです。 Blazorは実験的なものであることを思い出してください。実際の展開では、しばらく待つ必要があります... IEから他のブラウザに更新するまでの時間。
Internet Explorer(のみ)でasm.jsモードに正しくフォールバックする方法は本当にありますか?
"ブラウザがWebAssemblyをサポートしているかどうかを確認するにはどうすればよいですか?" と同じ質問だと思います。
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
をプロジェクトに含めることを忘れないでください。
Asm.jsのサポートは、このコミットでBlazorから意図的に削除されました: https://github.com/aspnet/Blazor/commit/4006cd543900fcc1cf76cd75a1b24007e60c8a67 。私が正しく理解している場合、在庫のblazorからasm.jsのサポートを取得するには、monoプロジェクトがasm.jsビルドをバイナリディストリビューションに含め始め、Blazorプロジェクトがそのビルド/デプロイツールに追加する必要があります。
まだ試していませんが、asm.jsのモノラルを自分で作成し、独自のデプロイプロセスの一部として、それをビルド済みのBlazorアプリケーションに挿入することは可能かもしれません。
私が正しく理解していれば、Blazorは引き続きmonoのインタープリターモードを使用して実行されるため、monoのwasmビルドをasm.jsで補足するだけで十分な場合があります。 Blazorが将来実際にアセンブリをwasmに直接コンパイルするように切り替えると、事態はさらに複雑になります。
Blazorは サーバー側ホスティングモード をサポートしています。あなたの質問ですでにこれを述べましたが、他の人がそれをスキップした場合に備えて、ここでこれについて議論しています。サーバーホスティングモードでは、クライアントは「従来の」JavaScriptを実行できれば十分です(ただし、ポリフィルが必要になる場合があります)。これは、IE11やwasmサポートのない他のクライアントで機能するように作成できます。もちろん、これはサーバーでより多くのリソースを必要とし、クライアントがオフラインシナリオをサポートするのを防ぎ、基本的には栄光のtelnetセッションのようなものです。しかし、これは LOBアプリケーション には十分です。
他のユーザーもこの問題に直面しているようです。
そのユーザーは、問題がポリフィル(そしてもちろんInternet Explorer 11)にあることを発見し、それはbabel/core-jsおよびその他の互換性のあるポリフィルで発生します。
IE11はSymbolでの深いセッター再帰に関していくつかの問題を抱えているようで、スタックメモリ超過エラーを受け取ります。
また、ポリフィルの修正も試みます。それを使用してテストを行い、問題の解決に役立つかどうかを確認できます。
参照: