如何让 QWebView 显示桌面通知?

Posted

技术标签:

【中文标题】如何让 QWebView 显示桌面通知?【英文标题】:How to allow QWebView to display desktop Notifications? 【发布时间】:2015-02-06 16:32:20 【问题描述】:

使用 Python 3 和 PyQT,我构建了一个简单的程序来运行特定的网络聊天。

此站点使用桌面通知,当在外部浏览器中运行时,它会自动要求用户授予通知。

在 QWebView 中,浏览器授权确认对话框永远不会显示,即使我单击了明确请求权限的按钮。

附加信息:我可以在控制台中看到,在启用QWebSettings.DeveloperExtrasEnabled 时,有一个Notification 对象具有default 权限(不允许显示通知)。

有没有办法在 QWebView 上启用通知?或者至少让它显示授权确认对话框?

【问题讨论】:

我认为一种可能的解决方法:使用 qtwebkit-bridge 并构建本机 Notification 对象。但我不知道我是否可以覆盖 webkit 通知。 【参考方案1】:

启用 html5 通知

WebKit 有一个插件系统,有点晦涩难懂,但是 QupZilla 开发了一个插件来让通知与 QWebView 一起工作。

在QupZilla plugins project 中有它们的源代码。只需使用项目中提供的简单步骤编译和安装即可:现在您的 webkit 将能够显示通知。

但您的应用默认无法使用它们。

只有当网页请求通知时,您的应用才能使用。您的应用无法强制执行此操作。

一个简单的示例:

class Wrapper(QWebView):

    def __init__(self, window):
        QWebView.__init__(self)
        # Other stuff here, like load URL, etc
        self.page().featurePermissionRequested.connect(self.permissionRequested)

    def permissionRequested(self, frame, feature):
        self.page().setFeaturePermission(frame, feature, QWebPage.PermissionGrantedByUser)

这将捕获 javascript 请求启用通知的权限。

替代解决方案

在找到 QupZilla 插件之前,我的第一个解决方案是使用qtwebkit-bridge,因此我没有使用 HTML5 通知,而是在页面中注入 JavaScript 以捕获通知调用,然后使用本机系统通知。

【讨论】:

另外,如果你想要一个 .deb 包,我已经为 Ubuntu here 构建了一个。

以上是关于如何让 QWebView 显示桌面通知?的主要内容,如果未能解决你的问题,请参考以下文章

怎样让手机桌面显示农历日期?

outlook如何设置新邮件到达桌面通知?

有哪些方法可以显示来自 Web 应用程序的桌面通知?

怎样让电脑桌面显示图标

浏览器发起桌面通知Notification.requestPermission

如何在我的桌面(Windows 7)上使用我的python程序在没有notify2,notify-send,pqt5的桌面上显示简单的通知?