Активировать родные уведомления Chrome

11

Я пытаюсь заставить работать нативные уведомления с помощью Google Chrome (или Chromium) в Ubuntu, но пока безуспешно.

Вещи, которые я уже пробовал:

И я помню, что тоже пробовал другое расширение, но я не помню его название.

Никто из них не работает. Я продолжаю получать нормальные уведомления самого Chrome.

Я использую Google Chrome 34.0.1847.137 на Ubuntu 14.04 x64.

Может кто-нибудь сказать мне, как заставить это работать?

Луи Матейссен
источник
1
Последняя версия Google Chrome Stable (сейчас 59) поддерживает флаг «Включить собственные уведомления», который прекрасно работает в Gnome Shell. Это доступно через chrome://flags/#enable-native-notifications.
ЭЙ

Ответы:

10

Для LibNotify устанавливаемый файл JSON имеет неверный идентификатор расширения. Обновление идентификатора расширения до правильного исправляет его.

Перейдите к .config/google-chrome/NativeMessagingHosts(для Google Chrome) или .config/chromium/NativeMessagingHosts(для Chromium). Откройте файл JSON в папке и обратите внимание, что в allowed_originsразделе он позволяет использовать идентификатор расширения gphchdpdmccpjmpiilaabhpdfogeiphf. Однако расширение ID (по крайней мере, в моем случае, но оно должно быть одинаковым для всех) на самом деле epckjefillidgmfmclhcbaembhpdeijg.

Чтобы это исправить, либо замените неправильный идентификатор расширения на правильный, либо добавьте запятую и правильный идентификатор расширения после нее. Я лично выбрал последний вариант, и вот как выглядит мой 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/"
  ]
}

РЕДАКТИРОВАТЬ: Это не единственное изменение, которое должно быть сделано. Расширение опирается на уведомления Webkit, которые устарели и удалены в Chrome (ium) и, вероятно, в других браузерах в пользу уведомлений HTML5. Поэтому google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.jsнеобходимо обновить. Я написал короткий сценарий для этого, но он нарушает большую часть стандарта, за исключением отображения уведомления. Замените все в файле следующим (добавлена ​​базовая поддержка для сайтов, которые все еще используются window.webkitNotificationsи (надеюсь) улучшена поддержка изображений) (добавлена ​​поддержка разрешений):

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
источник
1
Это работает, и загрузка процессора, кажется, решила сама. Тем не менее, все еще не работает в приложении, которое я хочу ( Webogram ). Но большое спасибо за ваш ответ и усилия, и я просто подожду, пока Chrome поддержит нативные уведомления!
Луи Матейссен
Пожалуйста, смотрите мой комментарий ниже, по умолчанию работает на Chrome 35
Konstigt
@ Konstigt: не то, чтобы уведомления не работали; дело в том, что уведомления не были родными уведомлениями Linux, и существующие решения (по крайней мере, первые две ссылки выше) использовали устаревший метод. (Лично я не виню в этом Chrome (ium).)
saiarcot895
У меня нет .config/chromium/NativeMessagingHostsпапки.
umpirsky
3
Человек, вы действительно должны написать свой собственный плагин и опубликовать его в Google Store. Если вы не готовы платить 5 $ за регистрацию, тогда я могу сделать это для вас.
Błażej Michalik