Activa las notificaciones nativas de Chrome

11

Estoy tratando de obtener notificaciones nativas para que funcionen con Google Chrome (o Chromium) en Ubuntu, pero hasta ahora no he tenido suerte.

Cosas que ya he probado:

Y recuerdo que también probé otra extensión, pero no recuerdo su nombre.

Ninguno de ellos funciona. Sigo recibiendo las notificaciones normales de Chrome.

Estoy usando Google Chrome 34.0.1847.137 en Ubuntu 14.04 x64.

¿Alguien puede decirme cómo hacer que esto funcione?

Louis Matthijssen
fuente
1
La última versión de Google Chrome Stable (59 como ahora) admite el indicador Habilitar notificaciones nativas, que funciona perfectamente en Gnome Shell. Está disponible a través de chrome://flags/#enable-native-notifications.
emi

Respuestas:

10

Para LibNotify, el archivo JSON que instala tiene una ID de extensión incorrecta. La actualización de la ID de extensión a la correcta lo arregla.

Vaya a .config/google-chrome/NativeMessagingHosts(para Google Chrome) o .config/chromium/NativeMessagingHosts(para Chromium). Abra el archivo JSON en la carpeta y observe que en la allowed_originssección, permite la identificación de la extensión gphchdpdmccpjmpiilaabhpdfogeiphf. Sin embargo, la ID de extensión (al menos en mi caso, pero debería ser la misma para todos) es en realidad epckjefillidgmfmclhcbaembhpdeijg.

Para solucionar esto, reemplace la ID de extensión incorrecta con la correcta o agregue una coma y la ID de extensión correcta después. Personalmente elegí la última opción, y así es como se ve mi archivo 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/"
  ]
}

EDITAR: Ese no es el único cambio que debe hacerse. La extensión se basa en las notificaciones de Webkit, que fueron desaprobadas y eliminadas en Chrome (ium) y probablemente en otros navegadores a favor de las notificaciones HTML5. Por lo tanto, google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.jsnecesita ser actualizado. He escrito un guión corto para esto, pero rompe la mayor parte del estándar, excepto para mostrar la notificación. Reemplace todo en el archivo con lo siguiente (soporte básico agregado para sitios que todavía usan window.webkitNotificationsy (con suerte) soporte mejorado de imágenes) (soporte de permisos agregado):

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
fuente
1
Está funcionando y el uso de la CPU parece haberse resuelto solo. Sin embargo, todavía no funciona en la aplicación que quiero ( Webogram ). Pero muchas gracias por su respuesta y esfuerzo, ¡solo esperaré a que Chrome admita notificaciones nativas!
Louis Matthijssen
Consulte mi comentario a continuación, funciona de manera predeterminada en Chrome 35
Konstigt
@ Konstigt: No es que las notificaciones no funcionaran; es que las notificaciones no eran notificaciones nativas de Linux, y las soluciones existentes (al menos los dos primeros enlaces anteriores) utilizaron el método obsoleto. (Personalmente, no culpo a Chrome (ium) por esto.)
saiarcot895
No tengo .config/chromium/NativeMessagingHostscarpeta
umpirsky
3
Hombre, realmente deberías escribir tu propio complemento y publicarlo en Google Store. Si no está ansioso por pagar 5 $ por registrarse, entonces puedo hacerlo por usted.
Błażej Michalik