首页 > 解决方案 > Blazor Server:如何关闭浏览器并向调用应用程序返回消息

问题描述

我最近将老化的 asp.net 网络表单站点转换为 Blazor 服务器。

使用托管在单独的 net5 应用程序中的 WebView2 浏览器控件调用站点上的一个页面。拨打电话是为了让应用程序的用户可以购买许可证。付款完成后,浏览器应将用户返回到应用程序,以便完成注册。

在我原来的 webforms 代码中,转移回应用程序中的方法是通过一个简单的 Jscript 函数完成的:

  Response.Write("<script>window.external.onbrowserclosed('" & exitmessage & "');</script>")

其中 onbrowserclosed 是应用程序中的目标方法。和 exitmessage 一个带有购买结果的简单字符串。

我试图在 _Host.cshtml 的 Blazor Server 中将此函数重写为

<script>
        function closebrowser(message) {external.closebrowser.onbrowserclosed  };
</script>

从处理购买的 Razor 组件调用它:

 await jsRuntime.InvokeVoidAsync("closebrowser", exitmessage);

这会调用脚本 OK,但前提是目标方法(onbrowserclosed)和 message 参数被删除。在没有目标方法的情况下调用它只会关闭浏览器,但显然这不是我想要的。Blazor 似乎不完全支持 window.external 。

有没有其他人遇到过这个问题?我更愿意找到一个 Blazor/.Net 本机替代方案来回调应用程序。但是一个 JScript 解决方案就可以了。

标签: c#blazorjscript

解决方案


最后,我实现了一个 gRPC 侦听器,它轮询我的站点以了解事务状态的变化。不像回调那么优雅,但 gRPC 快速可靠,所以绝对是要走的路。

如果有人遇到同样的问题,我可以提供更详细的描述。


推荐阅读