Ativar notificações nativas do Chrome

11

Estou tentando fazer com que as notificações nativas funcionem usando o Google Chrome (ou o Chromium) no Ubuntu, mas até o momento não tenho sorte.

Coisas que já experimentei:

  • Libertar notificações no Chrome

    Já corri install.sh (e reiniciei o Chrome):

    $ ./install.sh
    Native messaging host com.initiated.chrome_libnotify_notifications has been installed.
    
  • Notificação nativa do Linux

  • Chromify-OSD

E lembro que tentei outra extensão também, mas não lembro o nome dela.

Nenhum deles funciona. Eu continuo recebendo as notificações normais do próprio Chrome.

Estou usando o Google Chrome 34.0.1847.137 no Ubuntu 14.04 x64.

Alguém pode me dizer como fazer isso funcionar?

    
por Louis Matthijssen 14.05.2014 / 13:14

2 respostas

10

Para o LibNotify, o arquivo JSON que ele instala tem o ID de extensão incorreto. Atualizar o ID da extensão para o correto corrige isso.

Vá para .config/google-chrome/NativeMessagingHosts (para o Google Chrome) ou .config/chromium/NativeMessagingHosts (para o Chromium). Abra o arquivo JSON na pasta e observe que na seção allowed_origins , ele permite a ID de extensão gphchdpdmccpjmpiilaabhpdfogeiphf . No entanto, o ID da extensão (pelo menos no meu caso, mas deve ser o mesmo para todos) é, na verdade, epckjefillidgmfmclhcbaembhpdeijg .

Para corrigir isso, substitua a ID de extensão incorreta pela correta ou adicione uma vírgula e a ID de extensão correta após ela. Eu pessoalmente escolhi a última opção, e é assim que meu arquivo JSON se parece:

{
  "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: Essa não é a única mudança que precisa ser feita. A extensão depende de notificações do Webkit, que foram preteridas e removidas no Chrome (ium) e provavelmente em outros navegadores em favor de notificações de HTML5. Portanto, google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.js precisa ser atualizado. Eu escrevi um script curto para isso, mas ele quebra a maior parte do padrão, exceto para exibir a notificação. Substitua tudo no arquivo com o seguinte (suporte básico adicionado para sites que ainda usam window.webkitNotifications e (esperançosamente) suporte de imagem aprimorado) (suporte a permissões adicionado):

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) + "/";
}
    
por saiarcot895 14.05.2014 / 20:25
0

Agora ele funciona no Unity por padrão depois de instalar o Chrome 35

link

    
por Konstigt 25.05.2014 / 18:15