0

我们在其中一个页面上使用了 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我们已将我们网站域的所有排列添加到包中的内容 uri 部分.appxmanifest

但是, window.external.notify 仍然未定义,有没有人经历过。我们尝试了如下排列...

https://example.com

https://example.com/*

https://*.example.com/

https://*.example.com/*

但是没有任何效果,任何建议都非常感谢。(我们通过在 JS 控制台中调试知道它是未定义的)

作为一种替代方法,我们也尝试对自己进行深度链接,但每次都会提示“AppFoo 正在尝试打开 AppFoo”

非常感谢

4

2 回答 2

0

这无济于事,因为该示例未使用白名单 github.com/microsoft/Windows-universal-samples/blob/... 我的用例是针对外部域

我可以重现你的问题。您可以尝试使用WebView.InvokeScriptAsync注入 jsvascript 代码。例如,您可以在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);
}
于 2019-07-18T13:41:35.897 回答
0

所以可以在这里找到解决方案。

但是 TL;DR - 我们不得不交换:

if (window.external && window.external.notify)

为了

if (typeof (window.external) !== 'undefined' && ('notify' in window.external))

正确检测是否可以调用它。在 msft webview 中,第一个语句的计算结果为 false,第二个语句的计算结果为 true。

于 2019-07-31T06:54:14.987 回答