如何将 Blazor 应用程序作为插件/嵌入到另一个域中加载?

2024-04-29

我花了很多时间来让 blazor 插件正常工作,我的应用程序用作插件/嵌入到另一个域的网页中。它有效,但该方法有一些严重的缺点,我希望有人找到更好的方法。

只是为了澄清我在做什么,我的网站位于右侧,另一个网站需要调用我的插件的代码位于左侧。

我目前的方法:

  1. 使用提前编译 (AOT) 编译我的应用程序,详细信息here https://learn.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-6.0#ahead-of-time-aot-compilation。如果没有这个,Blazor 会尝试加载所有 dll 来自客户端域而不是我的服务器。
  2. 将“autostart = false”和“Blazor.start({...”代码添加到客户端域需要在其一侧编写的代码中。这甚至是需要的 使用 AOT,Blazor 仍然尝试从以下位置加载 blazor.boot.js 客户的域。这是硬连线的,看这个issue https://github.com/dotnet/aspnetcore/issues/22220。问题是 关闭 b/c 他们说它已通过 JS 初始化程序修复,但即使使用 AOT,JS 初始化程序仍然默认为托管客户端的域。所以它并不是真正固定的。

问题是:

  1. AOT 仅适用于发布版本。我需要进行开发构建以进行调试。 MS 表示他们正在研究这个问题,所以可能不是一个阻止者。
  2. 客户端的 Blazor.start 代码看起来很糟糕。
  3. 大多数 Blazor 的调用仍然默认使用托管客户端的域,例如上面 #2 中的 JS 初始值设定项。即使空插件正在工作,我怀疑这个问题将阻止创建更复杂的应用程序。这是一个大问题,我希望有人可以提供帮助。可以将 Blazor 应用程序嵌入到另一个域中,但可能仅适用于非常基本的 Blazor 页面,没有什么复杂的。

一种可能的解决方案是 MS 计划绕过防火墙阻止 Blazor 调用其 DLL,详细信息here https://devblogs.microsoft.com/dotnet/custom-deployment-layout-for-blazor-webassembly-apps/。这是如此复杂和高维护成本,我担心它会产生更多问题,尽管我无论如何都打算尝试一下。

任何改进/替代方案将不胜感激!谢谢!

编辑:上述大多数问题的一个潜在解决方案是更改 blazor 的 fetch 函数使用的默认来源。这并不能真正回答这个问题,所以我创建了第二个问题来涵盖它here https://stackoverflow.com/questions/70246981/how-to-change-blazors-default-uri-origin-from-the-hosting-domain.


此人的博客中的某些内容可能适合您的情况。我自己正在着手这项任务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Blazor 应用程序作为插件/嵌入到另一个域中加载? 的相关文章

随机推荐