Blazor取消了javascript互操作隔离



Blazor具有如下javascript隔离:

var module = await js.InvokeAsync<IJSObjectReference>("import",./_content/MyComponents/exampleJsInterop.js");
await module.InvokeAsync<string>("showPrompt", message);

有可能将其与取消编组的呼叫结合起来吗?我想做这样的事情:

var module = await js.InvokeUnmarshalled<IJSUnmarshalledObjectReference>("import",./_content/MyComponents/exampleJsInterop.js");
await module.InvokeUnmarshalled<string>("showPrompt", message);

到目前为止,还没有一个引用未分组JS模块的解决方案,但是您可以执行类似的操作来检查IJSUnmarshalledRuntime是否可用:

// Check if the IJSRuntime is the WebAssembly implementation of the JSRuntime
if (JsRuntime is IJSUnmarshalledRuntime wasmJsRuntime)
{
wasmJsRuntime.InvokeUnmarshalled<string, string, byte[], bool>("Download", fileName, contentType, file);
}
else
{
// Fall back to the slow method if not in WebAssembly
await DownloadModule.InvokeVoidAsync("Download", fileName, contentType, file);
}

有关使用IJSUnmarshalledRuntime的更多信息,请点击此处:https://learn.microsoft.com/en-us/aspnet/core/blazor/call-javascript-from-dotnet?view=aspnetcore-5.0#解组js互操作

现在可以在.Net 6中实现。这里讨论了更改Github讨论

您现在可以使用铸造作为您的模块参考:

var module = await js.InvokeAsync<IJSObjectReference>("import",./_content/MyComponents/exampleJsInterop.js");
if(module is IJSUnmarshalledObjectReference objRef)
{
objRef.InvokeUnmarshalled<string, string, byte[], bool>("Download", fileName, contentType, file);
}

使用.Net 5可以使用反射来调用一些内部函数。模块只有一个附加参数:long targetInstanceId。在我的项目中,这些id从1开始,每个导入的模块都会增加1。源

相关内容

  • 没有找到相关文章

最新更新