启用 .Net Native Tool Chain 时,AddWebAllowedObject 不起作用

Posted

技术标签:

【中文标题】启用 .Net Native Tool Chain 时,AddWebAllowedObject 不起作用【英文标题】:AddWebAllowedObject is not working when .Net Native Tool Chain is Enabled 【发布时间】:2021-11-21 05:08:48 【问题描述】:

我创建了 UWP 应用,其中嵌入了 web 视图。 webview 加载了 web 应用程序的 URL。 Web 应用程序在窗口对象中添加了一个 javascript 对象。 例子:window.html_communicator

Web 应用程序使用此 html_communicator 对象并在其上调用某些方法来调用 UWP 应用程序上的回调。

例如,可以在 html_communicator 上定义一个名为 onLocationSelect 的方法,Web 应用程序将在某些用户交互时调用此方法。 UWP 应用通过在 WebView 上调用 addWebAllowedObject 来注册方法。

当我禁用 .Net Native Tool Chain 时,回调工作正常。 但是当启用 .Net Natvie 工具链时,这些回调无法正常工作。

下面是一个javascript代码sn-p,它在按钮点击时调用桥接方法。

var html_communicator = html_communicator || ;
window.onload = function () 
    document.getElementById("locationSelect")
        .addEventListener("click", () => 
            if (html_communicator && html_communicator.onLocationSelect) 
                document.getElementById("msg").innerHTML = `Successfully called bridge method:                             Button clicked at $new Date()`;
            sumorea_app.onLocationSelect();
        
        else 
            document.getElementById("msg").innerHTML = `Failed to call bridge method: Button clicked at $new Date()`;
        
    )
    

【问题讨论】:

请参考文档here,必须将受信任内容的统一资源标识符(URI)添加到Package.appxmanifest中应用的ApplicationContentUriRules中的允许列表中 【参考方案1】:

当我禁用 .Net Native Tool Chain 时,回调工作正常。但是当启用 .Net Natvie 工具链时,这些回调无法正常工作。

请参考webview官方document,另外,可以允许WebView中受信任的JavaScript内容直接访问Windows RuntimeAPI。这为托管在 WebView 中的 Web 应用程序提供了强大的本机功能。要启用此功能,必须将受信任内容的统一资源标识符 (URI) 添加到 Package.appxmanifest 中应用的 ApplicationContentUriRules 的允许列表中,并将 WindowsRuntimeAccess 专门设置为“all”。

对于 Xamarin 解决方案,您需要检查是否已为 UWP 项目添加上述许可列表。

【讨论】:

感谢您的回复,根据您的 cmets,WindowsRuntimeAccess 已修改为“全部”。之后在加载 webview 时出现异常。 App.exe 中 0x756C46D2 (KernelBase.dll) 处的未处理异常:0x40010004:调试器终止进程。 App.exe 中 0x756C46D2 处未处理的异常:Microsoft C++ 异常:内存位置 0x07C9E858 处的 Js::JavascriptException。以及 Just in compiler 中的 Unchecked Script(调试器选项)

以上是关于启用 .Net Native Tool Chain 时,AddWebAllowedObject 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

关于Tween的chain方法由于浅拷贝出现不能启用一个tween的bug

关于Tween的chain方法由于浅拷贝出现不能启用一个tween的bug

关于Tween的chain方法由于浅拷贝出现不能启用一个tween的bug

Oracle Job Chain

Intel Realsense Depth Quality Tool 相关参数

Android之提示javax.net.ssl.SSLHandshakeException: Chain validation failed