Windows 10 UWP window.external.notify 在 WebView 中未定义
Windows 10 UWP window.external.notify is undefined in WebView
我们在 Windows 10 上为我们的一个页面使用 UWP Webview;为了与我们要使用的应用程序通信 window.external.notify().
如此处所述https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.webview.allowedscriptnotifyuris#Windows_UI_Xaml_Controls_WebView_AllowedScriptNotifyUris 我们已将网站域的所有排列添加到 Package.appxmanifest
中的内容 uri 部分
但是window.external.notify还是未定义,有没有人遇到过这种情况。
我们尝试了如下排列...
https://example.com
https://example.com/*
https://*.example.com/
https://*.example.com/*
但没有任何效果,非常感谢任何建议。 (在JS控制台调试知道是undefined)
作为替代方法,我们还尝试了对自己的深层链接,但每次都会提示 'AppFoo is trying to open AppFoo'
非常感谢
that doesn't help as the example isn't using whitelisting github.com/microsoft/Windows-universal-samples/blob/… my use case is for an external domain
我可以重现你的问题。您可以尝试使用 WebView.InvokeScriptAsync 来注入 javascript 代码。例如,您可以在 DOMContentLoaded
事件处理程序中注入 js 代码,如下所示:
private async void WebView_DOMContentLoaded(WebView sender, WebViewDOMContentLoadedEventArgs args)
{
string[] parameters = new string[] { "window.addEventListener('load', function() {window.external.notify('abc');})" };
await sender.InvokeScriptAsync("eval", parameters);
}
所以可以找到解决方案。
但是 TL;DR - 我们不得不交换:
if (window.external && window.external.notify)
对于
if (typeof (window.external) !== 'undefined' && ('notify' in window.external))
正确检测是否可以调用它。在 msft webview 中,第一个语句的计算结果为 false,第二个语句的计算结果为 true。
我们在 Windows 10 上为我们的一个页面使用 UWP Webview;为了与我们要使用的应用程序通信 window.external.notify().
如此处所述https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.webview.allowedscriptnotifyuris#Windows_UI_Xaml_Controls_WebView_AllowedScriptNotifyUris 我们已将网站域的所有排列添加到 Package.appxmanifest
中的内容 uri 部分但是window.external.notify还是未定义,有没有人遇到过这种情况。 我们尝试了如下排列...
https://example.com
https://example.com/*
https://*.example.com/
https://*.example.com/*
但没有任何效果,非常感谢任何建议。 (在JS控制台调试知道是undefined)
作为替代方法,我们还尝试了对自己的深层链接,但每次都会提示 'AppFoo is trying to open AppFoo'
非常感谢
that doesn't help as the example isn't using whitelisting github.com/microsoft/Windows-universal-samples/blob/… my use case is for an external domain
我可以重现你的问题。您可以尝试使用 WebView.InvokeScriptAsync 来注入 javascript 代码。例如,您可以在 DOMContentLoaded
事件处理程序中注入 js 代码,如下所示:
private async void WebView_DOMContentLoaded(WebView sender, WebViewDOMContentLoadedEventArgs args)
{
string[] parameters = new string[] { "window.addEventListener('load', function() {window.external.notify('abc');})" };
await sender.InvokeScriptAsync("eval", parameters);
}
所以可以找到解决方案
但是 TL;DR - 我们不得不交换:
if (window.external && window.external.notify)
对于
if (typeof (window.external) !== 'undefined' && ('notify' in window.external))
正确检测是否可以调用它。在 msft webview 中,第一个语句的计算结果为 false,第二个语句的计算结果为 true。