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。