【问题标题】:Windows 10 UWP window.external.notify is undefined in WebViewWindows 10 UWP window.external.notify 在 WebView 中未定义
【发布时间】:2019-11-26 08:38:56
【问题描述】:

我们正在为我们的一个页面使用 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 控制台调试知道它是未定义的)

作为一种替代方法,我们也尝试对自己进行深度链接,但每次都会提示'AppFoo is trying to open AppFoo'

非常感谢

【问题讨论】:

标签: uwp windows-10-universal uwp-xaml


【解决方案1】:

这无济于事,因为该示例未使用白名单 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);
}

【讨论】:

    【解决方案2】:

    所以可以找到解决方案here

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2017-01-03
      相关资源
      最近更新 更多