【发布时间】:2022-01-11 07:39:51
【问题描述】:
我花了很多时间来让 Blazor 插件正常工作,我的应用程序被用作插件/嵌入到另一个域的网页中。它有效,但该方法有一些严重的缺陷,我希望有人找到更好的方法。
为了澄清我在做什么,我的网站在右边,另一个网站需要调用我的插件的代码在左边。
我目前的方法:
- 使用 Ahead Of Time 编译 (AOT) 编译我的应用程序,详细信息 here。如果没有这个,Blazor 会尝试加载所有 dll 来自客户端域,而不是来自我的服务器。
- 将“autostart=false”和“Blazor.start({...”代码添加到客户端域需要编写的代码中。这甚至是 b/c 所需要的 使用 AOT,Blazor 仍然尝试从 客户的域。它是硬连线的,请参阅issue。问题是 关闭 b/c 他们说它已通过 JS 初始化程序修复,但即使使用 AOT,JS 初始化程序仍默认为托管客户端的域。所以它并没有真正修复。
问题是:
- AOT 仅适用于发布版本。我需要进行开发构建以进行调试。 MS 说他们正在处理这个问题,所以可能不是阻止程序。
- 客户端的 Blazor.start 代码看起来很糟糕。
- 大多数 Blazor 调用仍默认使用托管客户端的域,例如上面 #2 中的 JS 初始化程序。即使一个空插件正在工作,我怀疑这个问题会阻止创建更复杂的应用程序。这是一个大问题,我希望有人能提供帮助。可以在另一个域中嵌入 Blazor 应用,但可能仅适用于非常基本的 Blazor 页面,并不复杂。
一个可能的解决方案是 MS 计划绕过防火墙阻止 Blazor 对其 DLL 的调用,详细信息 here。这是一个如此复杂和高维护的问题,我担心它会产生更多问题,尽管我还是打算试一试。
任何改进/替代方案将不胜感激!谢谢!
edit:对上述大多数问题的潜在解决方案是更改 blazor 的 fetch 函数使用的默认来源。这并不能真正回答这个问题,所以我创建了第二个问题来涵盖它here。
【问题讨论】:
-
这是我需要尽快解决的问题,所以我会密切关注这个线程。在 DotnetConf 中,我记得他们展示了在另一个站点中使用它是多么容易(认为它是 React),而不使用 IFrame。在这里我找到了视频(dotnetConf 2021)youtu.be/oPyTZ-HGdn4?t=9228