类似于<iframe>
,<embed>
,<object>
等用于将外部视频,插件等嵌入到网站中,是否可以直接将应用程序嵌入到Blazor中?推测.NET应用程序会更容易。
就像是
<div>
<application path="/dist/file/myApplication.exe"></application>
</div>
看看Web Assembly的功能,我确信一般概念是可以实现的。我只是想知道是否有办法在Blazor中轻松完成。
我原来的问题措辞可能过于简单化了。我并不一定意味着字面上<application path="myApplication.exe"></application>
会做的伎俩。我真正想到的是通过WASM将非Javascript应用程序嵌入到网站中的用户友好方式的概念。我提到了Blazor,因为它似乎是目前提供更简单方法的最佳竞争者。
以下是启发这个问题的原因:https://webassembly.org/demo/Tanks/
我认为,由于Unity游戏已成功移植到浏览器上的Web Assembly中运行,因此可能与任何应用程序(在合理范围内)执行类似操作。
也许不是现在,而是在不太遥远的未来。
如果您有“在网络上托管”的内容,您可以使用以下代码将其“内置”到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>
在Linux或iOS上运行exe文件时会遇到问题。
在Windows上,这将是一个巨大的,不可接受的安全风险。我们一直在那里,用ActiveX做到了。没有人想重复这一点。
而且我不确定你的“网络装配能力”是什么意思,但目前它需要JS才能在网页上放置任何东西。
所以:不,这是不可能的,它永远不会。