【问题标题】:Is it possible to embed a .NET application within a Blazor website?是否可以在 Blazor 网站中嵌入 .NET 应用程序?
【发布时间】:2019-04-28 06:00:15
【问题描述】:

类似于<iframe><embed><object> 等用于将外部视频、插件等嵌入网站,是否可以直接将应用程序嵌入到 Blazor 中?据推测,.NET 应用程序会更容易。

类似

<div>

    <application path="/dist/file/myApplication.exe"></application>

</div>

看看 Web Assembly 的功能,我确信总体概念是可以实现的。我只是想知道是否有一种方法可以在 Blazor 中轻松完成。

更新说明:

我最初的问题措辞可能过于简单化。我并不一定意味着字面上的&lt;application path="myApplication.exe"&gt;&lt;/application&gt; 会成功。我真正考虑的是通过 WASM 将非 Javascript 应用程序嵌入网站的用户友好方式的概念。我提到 Blazor 是因为它似乎是目前提供更简单方法的最佳竞争者。

这就是激发这个问题的原因:https://webassembly.org/demo/Tanks/

我认为既然 Unity 游戏已成功移植到浏览器上的 Web Assembly 中运行,那么任何应用程序都可以进行类似操作(在合理范围内)。

也许不是现在,而是在不远的将来。

【问题讨论】:

  • 很可能不是。在这种情况下,应用程序会将什么作为输入和输出?
  • @SamiKuhmonen 我不确定你的意思。启发这个问题的是以下示例 - webassembly.org/demo/Tanks - 它基本上是嵌入到网站中的应用程序(尽管我不确定它是使用 .Net 还是 C++ 制作的)。我想知道这种事情是否可以通过 Blazor 实现,如果不是现在,那么可能在未来。
  • 我的意思是,如果你只是随机执行一个可执行文件,它将如何与任何东西交互?应用程序至少有输出,它只是将标准输出到网页吗?输入?图形用户界面?如果它不是 .NET 应用程序,则需要将其转换为 wasm 或 .NET 可以处理的东西。
  • 在 blazor 之前,Unity 游戏可以在浏览器中运行。你必须以某种方式编译它
  • @FCin 是的,我知道这一点。对我来说,重点是应用程序被移植/转换为 Web 程序集以在浏览器中运行。理所当然地,应该有一种方法可以对许多其他类型的应用程序执行此操作。不一定必须通过 Blazor 完成,我只是认为这可能是值得考虑的事情。

标签: c# asp.net-core blazor


【解决方案1】:

如果您有“托管在网络上”的内容,您可以使用如下代码将其嵌入“内部”Blazor 应用程序:

    <script type="text/javascript">
    // From: https://gomakethings.com/getting-html-asynchronously-from-another-page/
    var getHTML = function (url, callback) {
        // Feature detection
        if (!window.XMLHttpRequest) return;
        // Create new request
        var xhr = new XMLHttpRequest();
        // Setup callback
        xhr.onload = function () {
            if (callback && typeof (callback) === 'function') {
                callback(this.responseXML);
            }
        };
        // Get the HTML
        xhr.open('GET', url);
        xhr.responseType = 'document';
        xhr.send();
    };
    </script>

    <script type="text/javascript">
    var populateDiv = function (element) {
        getHTML('https://blazor.net/', function (response) {
            element.innerHTML = response.documentElement.innerHTML;
        });
    };
    </script>

ElementRef modalBody; // reference to the DIV
protected override void OnAfterRender()
{
  // This will set the content of the Div
  // to the content of the server Login page
  setDivContent(modalBody);
}
    
public Task setDivContent(ElementRef elementRef)
{
   return JSRuntime.InvokeAsync<object>("populateDiv", elementRef);
}
<div ref="modalBody" class="modal-body">
<!-- Dynamic content will go here -->
</div>

见: Razor Components Popups and JavaScript Interop

【讨论】:

  • 我认为这与我所要求的相反。您的代码看起来像 Javascript 互操作,用于在 Blazor 网站上执行标准网站样式的 Javascript 操作。我希望的是一种将 .NET 应用程序(或任何应用程序)插入 Blazor 站点的方法。
  • 是的,Windows 应用商店中一半应用程序的代码也是如此。我在问(我知道这是一个很大的“如果”)是否有可能让这样的通用应用程序在 Blazor 中运行。与 Javascript 互操作无关。
猜你喜欢
  • 2019-12-07
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
相关资源
最近更新 更多