Ativar notificações nativas do Chrome

11

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

Coisas que eu já tentei:

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

Nenhum deles funciona. 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?

Louis Matthijssen
fonte
1
A versão mais recente do Google Chrome Stable (agora 59) suporta o sinalizador Ativar notificações nativas, que funciona perfeitamente no Gnome Shell. Está disponível via chrome://flags/#enable-native-notifications.
emi

Respostas:

10

Para LibNotify, o arquivo JSON que ele instala tem o ID de extensão incorreto. A atualização do ID da extensão para a correta corrige-o.

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

Para corrigir isso, substitua o ID de extensão incorreto pelo correto ou adicione uma vírgula e o ID de extensão correto a seguir. Eu, pessoalmente, escolhi a última opção e aqui está a aparência do meu arquivo 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: Essa não é a única alteração que precisa ser feita. A extensão depende de notificações do Webkit, que foram descontinuadas e removidas no Chrome (ium) e provavelmente em outros navegadores em favor das notificações HTML5. Portanto, google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.jsprecisa ser atualizado. Eu escrevi um script curto para isso, mas ele quebra a maior parte do padrão, exceto a exibição da notificação. Substitua tudo no arquivo pelo seguinte (suporte básico adicionado para sites ainda em uso window.webkitNotificationse (espero)) suporte aprimorado a imagens) (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) + "/";
}
saiarcot895
fonte
1
Está funcionando e o uso da CPU parece ter se resolvido. No entanto, ainda não funciona no aplicativo que eu quero ( Webogram ). Muito obrigado pela sua resposta e esforço, e esperarei que o Chrome suporte as notificações nativas!
Louis Matthijssen
Por favor, veja o meu comentário abaixo, funciona por padrão no Chrome 35
Konstigt
@ Konstigt: Não é que as notificações não estavam funcionando; é que as notificações não eram nativas do Linux e as soluções existentes (pelo menos os dois primeiros links acima) usaram o método descontinuado. (Eu, pessoalmente, não culpo Chrome (io) para isso.)
saiarcot895
Eu não tenho .config/chromium/NativeMessagingHostspasta
umpirsky
3
Cara, você realmente deve escrever seu próprio plugin e publicá-lo na Google Store. Se você não deseja pagar US $ 5,00 pelo registro, eu posso fazer isso por você.
Błażej Michalik