激活Chrome本机通知


11

我正在尝试在Ubuntu上使用Google Chrome(或Chromium)使本机通知正常工作,但到目前为止还没有运气。

我已经尝试过的事情:

而且我记得我也尝试过另一个扩展名,但是我不记得它的名字了。

他们都不工作。我不断收到Chrome本身的正常通知。

我在Ubuntu 14.04 x64上使用Google Chrome 34.0.1847.137。

有人可以告诉我如何使它工作吗?


1
最新版本的Google Chrome稳定版(目前为59)支持Enable Native Notifications标志,该标志在Gnome Shell上运行良好。可通过访问chrome://flags/#enable-native-notifications
emi

Answers:


10

对于LibNotify,它安装的JSON文件具有错误的扩展名。将扩展ID更新为正确的扩展ID即可解决。

转到.config/google-chrome/NativeMessagingHosts(对于Google Chrome)或.config/chromium/NativeMessagingHosts(对于Chromium)。打开文件夹中的JSON文件,请注意,在该allowed_origins部分中,它允许扩展名ID gphchdpdmccpjmpiilaabhpdfogeiphf。但是,扩展名ID(至少在我来说是这样,但每个人都应该相同)实际上是epckjefillidgmfmclhcbaembhpdeijg

要解决此问题,请用正确的扩展名替换不正确的扩展名,或者在其后添加逗号和正确的扩展名。我个人选择了后者,这是我的JSON文件的样子:

{
  "name": "com.initiated.chrome_libnotify_notifications",
  "description": "Libnotify Notifications in Chrome",
  "path": path to the location of install.sh,
  "type": "stdio",
  "allowed_origins": [
    "chrome-extension://gphchdpdmccpjmpiilaabhpdfogeiphf/",
    "chrome-extension://epckjefillidgmfmclhcbaembhpdeijg/"
  ]
}

编辑:这不是唯一需要进行的更改。该扩展依赖于Webkit通知,Chrome(ium)和其他可能支持HTML5通知的其他浏览器已弃用并删除了Webkit通知。因此,google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.js需要进行更新。我为此编写了一个简短的脚本,但是除了显示通知外,它违反了大多数标准。用以下内容替换文件中的所有内容(增加了对仍在使用的网站的基本支持window.webkitNotifications和(希望)改进的图像支持)(添加了权限支持):

OriginalNotification = Notification

Notification = function(title, properties) {
        if (Notification.permission != "granted") {
                if (this.onError) {
                        this.onError();
                }
                return;
        }
        if (!properties.hasOwnProperty("body")) {
                properties["body"] = "";
        }
        if (!properties.hasOwnProperty("icon")) {
                properties["icon"] = "";
        }
        if (properties["icon"]) {
                properties["icon"] = getBaseURL() + properties["icon"];
        }
        document.getElementById('libnotify-notifications-transfer-dom-area').innerText = JSON.stringify({title:title, body:properties["body"], iconUrl:properties["icon"]});
        var event = document.createEvent("UIEvents");
        event.initUIEvent("change", true, true);
        document.getElementById('libnotify-notifications-transfer-dom-area').dispatchEvent(event);
        if (this.onShow) {
                this.onShow();
        }
};

Object.defineProperty(Notification, "permission", {
        get: function() {
                return OriginalNotification.permission;
        },
        set: undefined
});

Notification.requestPermission = function(callback) {
        OriginalNotification.requestPermission(callback);
}

window.webkitNotifications = {}

window.webkitNotifications.checkPermission = function() {
        return 0;
}

window.webkitNotifications.createNotification = function(image, title, body) {
        if (image) {
                image = getBaseURL() + image;
        }
        document.getElementById('libnotify-notifications-transfer-dom-area').innerText = JSON.stringify({title:title, body:body, iconUrl:image});
        var event = document.createEvent("UIEvents");
        event.initUIEvent("change", true, true);
        document.getElementById('libnotify-notifications-transfer-dom-area').dispatchEvent(event);
}

function getBaseURL() {
           return location.protocol + "//" + location.hostname + 
                   (location.port && ":" + location.port) + "/";
}

1
它正在工作,CPU使用率似乎已解决。但是,仍然无法在我想要的应用程序中工作(Webogram)。但是,非常感谢您的回答和付出,我将等待Chrome支持本机通知!
Louis Matthijssen 2014年

请在下面查看我的评论,默认情况下可在Chrome 35上使用
Konstigt 2014年

@Konstigt:不是通知没有起作用;通知不是本机Linux通知,现有解决方案(至少上面的前两个链接)使用了不推荐使用的方法。(我个人不为此怪罪Chrome(ium)。)
saiarcot895 2014年

我没有.config/chromium/NativeMessagingHosts文件夹。
umpirsky

3
伙计,您确实应该编写自己的插件并将其发布到Google Store。如果您不急于支付5美元的注册费用,那么我可以为您完成。
Błażej米哈利克

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.