如何在 UWP 应用的 XAML Webview 中添加对 HTML5 通知的支持?

Posted

技术标签:

【中文标题】如何在 UWP 应用的 XAML Webview 中添加对 HTML5 通知的支持?【英文标题】:How to add support for HTML5 notifications in XAML Webview in a UWP app? 【发布时间】:2019-12-20 02:22:37 【问题描述】:

所以我在我的 UWP 应用程序中使用WebView,我想处理html5 notifications。我所做的是将ScriptNotify 事件的支持添加到我的webview (here)。

 MyWebView.ScriptNotify += WebView_Notify;
 private void WebView_Notify(object sender, NotifyEventArgs e)
 
    Debug.WriteLine("NOTIFIED " + e.Value);
 

然后使用InvokeScriptAsync我运行了以下javascript代码:

(function() 
    var N = window.Notification;

    window.external.notify(N.permission);
    var P = function (title, options)
        window.external.notify(title)
    ;
    P.permission = 'granted';
    N = P
)();

但是,这不起作用。在我的调试输出中,我确实得到了:

"通知默认值`

这意味着ScriptNotify 处理程序正在被触发。但是,如何在我的应用中实现 HTML5 通知支持?

【问题讨论】:

【参考方案1】:

我找到了一个可能对您有所帮助的新解决方案。

页面加载时发起通知请求,WebView可以拦截,使用事件PermissionRequested

private void WebView_PermissionRequested(WebView sender, WebViewPermissionRequestedEventArgs args)

    if (args.PermissionRequest.PermissionType == WebViewPermissionType.WebNotifications)
    
        args.PermissionRequest.Allow();
    

你也可以在监听请求时弹出一个窗口,让用户选择是否接受通知。

最好的问候。

【讨论】:

这看起来很棒!但是,我发现了两个主要问题:第一个是重新启动时WebView 不会“记住”之前已授予权限,第二个是我不确定在触发通知时如何拦截。跨度> 关于第一点。是的,每次重启WebView,就相当于新建了一个浏览器,不会保存和记录用户数据。关于第二点,很遗憾,我还没有找到外部拦截触发通知并获取内容的方法。 是的,第一个问题很容易解决,但我仍在寻找第二个问题的解决方案。查看我的尝试here @daljit97 你能概括一下你是如何解决第一个问题的吗?

以上是关于如何在 UWP 应用的 XAML Webview 中添加对 HTML5 通知的支持?的主要内容,如果未能解决你的问题,请参考以下文章

默认情况下如何以全屏模式启动 uwp webview 应用程序

UWP 拦截 Webview POST 请求并获取内容

Extensions in UWP Community Toolkit - WebViewExtensions

在 UWP 表单中关闭用户与 WebView 的交互

如何在 UWP 类库中使用 XAML 静态资源和设计时数据

如何在 UWP XAML 上将样式触发器设置为路径绑定父状态