UWP应用WebView:本地网页调用window.external.notify失败排查
解决UWP WebView中
window.external.notify报错的问题 我来帮你排查这个棘手的问题,你遇到的TypeError: Object doesn't support property or method 'notify',大概率和Content URI权限配置、WebView的核心设置有关,咱们一步步拆解解决:
1. 修正Content URI的权限配置
你提到把权限设为了"Allow for web only",但对于ms-appx-web:///协议的本地应用内网页,这个权限等级是不够的——window.external.notify属于应用和WebView的双向通信,需要更开放的权限:
- 打开
Package.appxmanifest,找到Content URIs板块 - 确保你注册的
ms-appx-web:///[SomeFolder]/*对应的权限设置为 "Allow for all" - 关键:一定要勾选ScriptNotify选项(很多人会漏掉这个细节,直接导致通信被拦截)
2. 确认WebView的IsScriptNotifyEnabled属性
不管是在XAML还是后台代码里,都要检查WebView是否启用了ScriptNotify功能:
- XAML写法:
<WebView x:Name="MyWebView" IsScriptNotifyEnabled="True" /> - 后台代码写法:
MyWebView.IsScriptNotifyEnabled = true;
虽然这个属性默认是true,但如果被意外修改为false,会直接导致window.external.notify失效。
3. 验证网页的URI加载格式
确保你加载网页的URI是标准的ms-appx-web协议格式,比如后台代码里应该这么写:
MyWebView.Navigate(new Uri("ms-appx-web:///SomeFolder/SomePage.html"));
注意协议里三个斜杠后直接跟文件夹名,不要多写或少写斜杠,格式错误也可能引发通信异常。
4. 检查版本兼容性(补充确认)
你的应用目标版本是17763(Windows 10 October 2018 Update),这个版本对WebView的ScriptNotify支持是完全没问题的,但要确保应用的最低版本不低于16299(Fall Creators Update),过低的版本可能存在兼容性限制。
快速测试建议
可以先写一个极简的测试页面验证通信是否正常:
<!DOCTYPE html> <html> <head> <title>Test Notify</title> </head> <body> <button onclick="window.external.notify('test message from web')">Send Test Notify</button> </body> </html>
把这个页面放到你的SomeFolder里加载,点击按钮如果还是报错,那基本可以确定是Content URI的配置问题;如果能正常触发应用端的ScriptNotify事件,再逐步排查原有页面的JS代码逻辑问题。
内容的提问来源于stack exchange,提问作者J. H.
相关产品推荐
相关产品推荐

