web-dev-qa-db-fra.com

Activer Chrome notifications natives

J'essaie de faire fonctionner les notifications natives à l'aide de Google Chrome (ou de Chrome) sur Ubuntu, mais je n'ai pas eu de chance.

Choses que j'ai déjà essayées:

Et je me souviens d’avoir aussi essayé une autre extension mais je ne me souviens pas de son nom.

Aucun d'entre eux ne fonctionne. Je continue à recevoir les notifications normales de Chrome lui-même.

J'utilise Google Chrome 34.0.1847.137 sur Ubuntu 14.04 x64.

Est ce que quelqu'un peut me dire comment faire fonctionner ça?

11

Pour LibNotify, le fichier JSON qu'il installe a un ID d'extension incorrect. La mise à jour de l'ID d'extension vers le bon 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 section allowed_origins, il autorise l'extension ID gphchdpdmccpjmpiilaabhpdfogeiphfname__. Cependant, l'ID d'extension (du moins dans mon cas, mais il devrait être identique pour tout le monde) est en fait epckjefillidgmfmclhcbaembhpdeijgname__.

Pour résoudre ce problème, remplacez l'ID d'extension incorrect par l'ID correct ou ajoutez une virgule et l'ID d'extension correct après celle-ci. J'ai personnellement choisi la 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 s'appuie sur les notifications Webkit, obsolètes et supprimées dans Chrome (ium), ainsi que sur d'autres navigateurs en faveur des notifications HTML5. Par conséquent, google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.js doit être mis à jour. J'ai écrit un court script pour cela, mais il enfreint la plupart des normes sauf l'affichage de la notification. Remplacez tous les éléments du fichier par les éléments suivants (prise en charge de base ajoutée pour les sites utilisant toujours window.webkitNotifications et (espérons) une prise en charge améliorée des images) (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) + "/";
}
10
saiarcot895

Maintenant, cela fonctionne sur Unity par défaut après l’installation de Chrome 35

http://www.webupd8.org/2014/05/google-chrome-stable-35-for-linux.html

0
Konstigt