Activer les notifications natives de Chrome

11

J'essaie d'obtenir des notifications natives pour fonctionner avec Google Chrome (ou Chromium) sur Ubuntu, mais pas de chance jusqu'à présent.

Des choses que j'ai déjà essayées:

Et je me souviens que j'ai aussi essayé une autre extension mais je ne me souviens pas de son nom.

Aucun ne fonctionne. Je reçois toujours les notifications normales de Chrome lui-même.

J'utilise Google Chrome 34.0.1847.137 sur Ubuntu 14.04 x64.

Quelqu'un peut-il me dire comment faire fonctionner cela?

Louis Matthijssen
la source
1
La dernière version de Google Chrome Stable (59 comme maintenant) prend en charge le drapeau Activer les notifications natives, qui fonctionne parfaitement sur Gnome Shell. Il est disponible via chrome://flags/#enable-native-notifications.
emi

Réponses:

10

Pour LibNotify, le fichier JSON qu'il installe a l'ID d'extension incorrect. La mise à jour de l'ID d'extension vers la bonne corrige le problème.

Accédez à .config/google-chrome/NativeMessagingHosts(pour Google Chrome) ou .config/chromium/NativeMessagingHosts(pour Chromium). Ouvrez le fichier JSON dans le dossier et notez que dans la allowed_originssection, il autorise l'ID d'extension gphchdpdmccpjmpiilaabhpdfogeiphf. Cependant, l'ID d'extension (au moins dans mon cas, mais il devrait être le même pour tout le monde) est en fait epckjefillidgmfmclhcbaembhpdeijg.

Pour résoudre ce problème, remplacez l'ID d'extension incorrect par celui correct, ou ajoutez une virgule et l'ID d'extension correct après. J'ai personnellement choisi cette dernière option, et voici à quoi ressemble mon fichier 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: Ce n'est pas le seul changement qui doit être fait. L'extension repose sur les notifications Webkit, qui ont été dépréciées et supprimées dans Chrome (ium) et probablement d'autres navigateurs au profit des notifications HTML5. Par conséquent, google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.jsdoit être mis à jour. J'ai écrit un court script pour cela, mais il brise la plupart des normes, sauf pour afficher la notification. Remplacez tout dans le fichier par ce qui suit (prise en charge de base ajoutée pour les sites utilisant toujours window.webkitNotificationset (espérons-le) prise en charge d'image améliorée) (prise en charge des autorisations ajoutée):

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
la source
1
Cela fonctionne et l'utilisation du processeur semble s'être résolue. Cependant, ne fonctionne toujours pas dans l'application que je veux ( Webogram ). Mais merci beaucoup pour votre réponse et vos efforts et j'attendrai simplement que Chrome prenne en charge les notifications natives!
Louis Matthijssen
Veuillez voir mon commentaire ci-dessous, fonctionne par défaut sur Chrome 35
Konstigt
@Konstigt: Ce n'est pas que les notifications ne fonctionnaient pas; c'est que les notifications n'étaient pas des notifications Linux natives, et les solutions existantes (au moins les deux premiers liens ci-dessus) ont utilisé la méthode déconseillée. (
Personnellement,
Je n'ai pas de .config/chromium/NativeMessagingHostsdossier.
umpirsky
3
Man, vous devriez vraiment écrire votre propre plugin et le publier sur Google Store. Si vous n'êtes pas impatient de payer 5 $ pour vous inscrire, je peux le faire pour vous.
Błażej Michalik