在UWP应用中使用window.external.notify时,ApplicationContentUriRules需完全匹配吗?
解决UWP WebView中
window.external.notify()触发ScriptNotify事件的问题 刚好之前做UWP项目时踩过这个坑,要让WebView里的网页调用window.external.notify()能触发App里的ScriptNotify事件,核心就是给网页的URI配置权限,下面是具体的操作步骤和注意点:
方法一:通过Visual Studio设计器可视化配置(最推荐)
- 打开你的UWP项目,找到
Package.appxmanifest文件,双击打开它(默认会启动可视化设计器) - 切换到内容URI选项卡
- 点击添加按钮,输入你需要允许的网页URI(例如
https://your-target-website.com) - 在权限下拉菜单中选择允许,同时确保勾选了脚本选项——这一步是让网页脚本能和UWP应用交互的关键
方法二:手动编辑应用清单文件
如果可视化设计器出现问题,你可以直接编辑清单的代码:
- 右键
Package.appxmanifest文件,选择查看代码 - 在
<Application>节点内部,添加ApplicationContentUriRules配置,示例如下:
<ApplicationContentUriRules> <!-- 这里的Match替换成你实际的网页URI,*通配符可匹配子页面 --> <Rule Match="https://your-target-website.com/*" Type="include" WindowsRuntimeAccess="all" /> </ApplicationContentUriRules>
WindowsRuntimeAccess="all"会允许网页调用Windows Runtime相关能力,包括触发ScriptNotify事件。
关键注意事项
- URI协议要求:清单中添加的URI必须使用HTTPS协议(如果是本地内嵌的HTML文件,需要用
ms-appx-web://协议),HTTP协议的URI是不被允许的,配置了也不会生效 - URI精度:尽量使用精确的URI或范围合适的通配符,避免用
https://*这种过于宽泛的匹配,会带来安全风险 - 事件绑定:配置完成后,别忘了在代码里给WebView绑定
ScriptNotify事件处理器,示例C#代码如下:
private void TargetWebView_ScriptNotify(object sender, NotifyEventArgs e) { // e.Value就是网页调用window.external.notify时传入的参数 string webMessage = e.Value; // 这里写你的业务处理逻辑 }
内容的提问来源于stack exchange,提问作者Corcus
相关产品推荐
相关产品推荐

