Attiva le notifiche native di Chrome


11

Sto cercando di far funzionare le notifiche native usando Google Chrome (o Chromium) su Ubuntu, ma finora non ho avuto fortuna.

Cose che ho già provato:

E ricordo di aver provato anche un'altra estensione, ma non ricordo il suo nome.

Nessuno di loro funziona. Continuo a ricevere le normali notifiche di Chrome stesso.

Sto usando Google Chrome 34.0.1847.137 su Ubuntu 14.04 x64.

Qualcuno può dirmi come farlo funzionare?


1
L'ultima versione di Google Chrome Stable (59 come oggi) supporta il flag Abilita notifiche native, che funziona perfettamente su Gnome Shell. È disponibile tramite chrome://flags/#enable-native-notifications.
emi,

Risposte:


10

Per LibNotify, il file JSON che installa ha l'ID estensione errato. L'aggiornamento dell'ID estensione a quello corretto lo risolve.

Vai a .config/google-chrome/NativeMessagingHosts(per Google Chrome) o .config/chromium/NativeMessagingHosts(per Chromium). Aprire il file JSON nella cartella e notare che nella allowed_originssezione consente l'ID estensione gphchdpdmccpjmpiilaabhpdfogeiphf. Tuttavia, l'ID estensione (almeno nel mio caso, ma dovrebbe essere lo stesso per tutti) è in realtà epckjefillidgmfmclhcbaembhpdeijg.

Per risolvere questo problema, sostituire l'ID estensione errato con quello corretto oppure aggiungere una virgola e l'ID estensione corretto dopo di esso. Personalmente ho scelto quest'ultima opzione, ed ecco come appare il mio file 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/"
  ]
}

EDIT: non è l'unica modifica che deve essere fatta. L'estensione si basa su notifiche Webkit, che sono state deprecate e rimosse in Chrome (ium) e probabilmente altri browser a favore delle notifiche HTML5. Pertanto, google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.jsdeve essere aggiornato. Ho scritto un breve script per questo, ma rompe la maggior parte dello standard tranne che per visualizzare la notifica. Sostituisci tutto nel file con il seguente (aggiunto supporto di base per i siti ancora in uso window.webkitNotificationse (si spera) migliorato il supporto per le immagini) (supporto per le autorizzazioni aggiunto):

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
Funziona e l'utilizzo della CPU sembra essersi risolto da solo. Tuttavia, non funziona ancora nell'applicazione desiderata ( Webogram ). Ma grazie mille per la tua risposta e il tuo impegno e aspetterò solo che Chrome supporti le notifiche native!
Louis Matthijssen,

Si prega di vedere il mio commento qui sotto, funziona di default su Chrome 35
Konstigt

@Konstigt: non è che le notifiche non funzionassero; è che le notifiche non erano notifiche Linux native e le soluzioni esistenti (almeno i primi due collegamenti sopra) utilizzavano il metodo obsoleto. (Personalmente non biasimo Chrome (ium) per questo.)
saiarcot895

Non ho una .config/chromium/NativeMessagingHostscartella.
umpirsky,

3
Amico, dovresti davvero scrivere il tuo plugin e pubblicarlo su Google Store. Se non sei desideroso di pagare 5 $ per la registrazione, allora posso farlo per te.
Błażej Michalik,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.