Aktivieren Sie native Chrome-Benachrichtigungen

11

Ich versuche, native Benachrichtigungen mit Google Chrome (oder Chromium) unter Ubuntu zum Laufen zu bringen, aber bisher kein Glück.

Dinge, die ich bereits versucht habe:

Und ich erinnere mich, dass ich auch eine andere Erweiterung ausprobiert habe, aber ich erinnere mich nicht an ihren Namen.

Keiner von ihnen funktioniert. Ich erhalte weiterhin die normalen Benachrichtigungen über Chrome.

Ich verwende Google Chrome 34.0.1847.137 unter Ubuntu 14.04 x64.

Kann mir jemand sagen, wie ich das zum Laufen bringen kann?

Louis Matthijssen
quelle
1
Die neueste Version von Google Chrome Stable (wie bisher 59) unterstützt das Flag "Native Benachrichtigungen aktivieren", das unter Gnome Shell perfekt funktioniert. Es ist über erhältlich chrome://flags/#enable-native-notifications.
Emi

Antworten:

10

Bei LibNotify hat die installierte JSON-Datei die falsche Erweiterungs-ID. Durch Aktualisieren der Erweiterungs-ID auf die richtige wird das Problem behoben.

Gehen Sie zu .config/google-chrome/NativeMessagingHosts(für Google Chrome) oder .config/chromium/NativeMessagingHosts(für Chromium). Öffnen Sie die JSON-Datei im Ordner und beachten Sie, dass im allowed_originsAbschnitt die Erweiterungs-ID zulässig ist gphchdpdmccpjmpiilaabhpdfogeiphf. Die Erweiterungs-ID (zumindest in meinem Fall, sollte aber für alle gleich sein) ist jedoch tatsächlich epckjefillidgmfmclhcbaembhpdeijg.

Um dies zu beheben, ersetzen Sie entweder die falsche Erweiterungs-ID durch die richtige oder fügen Sie danach ein Komma und die richtige Erweiterungs-ID hinzu. Ich persönlich habe mich für die letztere Option entschieden und meine JSON-Datei sieht folgendermaßen aus:

{
  "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/"
  ]
}

EDIT: Das ist nicht die einzige Änderung, die vorgenommen werden muss. Die Erweiterung basiert auf Webkit-Benachrichtigungen, die in Chrome (ium) und wahrscheinlich anderen Browsern zugunsten von HTML5-Benachrichtigungen veraltet und entfernt wurden. Muss google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.jsdaher aktualisiert werden. Ich habe ein kurzes Skript dafür geschrieben, aber es bricht den größten Teil des Standards, außer dass die Benachrichtigung angezeigt wird. Ersetzen Sie alles in der Datei durch Folgendes (grundlegende Unterstützung für Websites, die noch verwendet werden, window.webkitNotificationsund (hoffentlich) verbesserte Bildunterstützung hinzugefügt) (Unterstützung für Berechtigungen hinzugefügt):

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) + "/";
}
saiarcot895
quelle
1
Es funktioniert und die CPU-Auslastung scheint sich von selbst gelöst zu haben. Funktioniert jedoch immer noch nicht in der gewünschten Anwendung ( Webogramm ). Aber vielen Dank für Ihre Antwort und Ihren Einsatz. Ich warte nur darauf, dass Chrome native Benachrichtigungen unterstützt!
Louis Matthijssen
Bitte beachten Sie meinen Kommentar unten, funktioniert standardmäßig auf Chrome 35
Konstigt
@Konstigt: Es ist nicht so, dass Benachrichtigungen nicht funktionierten; Es ist so, dass die Benachrichtigungen keine nativen Linux-Benachrichtigungen waren und vorhandene Lösungen (zumindest die ersten beiden Links oben) die veraltete Methode verwendeten. (Ich persönlich beschuldige Chrome (ium) nicht dafür.)
saiarcot895
Ich habe keinen .config/chromium/NativeMessagingHostsOrdner.
Umpirsky
3
Mann, du solltest wirklich dein eigenes Plugin schreiben und es im Google Store veröffentlichen. Wenn Sie nicht bereit sind, 5 $ für die Registrierung zu zahlen, kann ich das für Sie tun.
Błażej Michalik