Активуйте нативні сповіщення Chrome


11

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

Що я вже спробував:

І я пам’ятаю, що я спробував ще одне розширення, але не пам’ятаю його назви.

Жоден з них не працює. Я постійно отримую звичайні сповіщення про Chrome.

Я використовую Google Chrome 34.0.1847.137 на Ubuntu 14.04 x64.

Хтось може сказати мені, як це зробити?


1
Остання версія Google Chrome Stable (59 зараз) підтримує прапор Enable Native Notifications, який ідеально працює на Gnome Shell. Це доступно через chrome://flags/#enable-native-notifications.
емі

Відповіді:


10

Для LibNotify файл JSON, який він встановлює, має неправильний ідентифікатор розширення. Оновлення ідентифікатора розширення до правильного виправляє його.

Перейдіть до .config/google-chrome/NativeMessagingHosts(для Google Chrome) або .config/chromium/NativeMessagingHosts(для Chromium). Відкрийте файл JSON у папці та зауважте, що у allowed_originsрозділі він дозволяє ідентифікатор розширення gphchdpdmccpjmpiilaabhpdfogeiphf. Однак ідентифікатор розширення (принаймні в моєму випадку, але він повинен бути однаковим для всіх) насправді 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/"
  ]
}

EDIT: Це не єдина зміна, яку потрібно внести. Розширення покладається на сповіщення 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) + "/";
}

1
Це працює, і використання процесора, схоже, вирішило себе. Однак все ще не працює в програмі, яку я хочу ( Webogram ). Але дуже дякую за вашу відповідь та зусилля, і я просто зачекаю, коли Chrome підтримає сповіщення сповіщення!
Луї Маттійссен

Ознайомтесь із моїм коментарем нижче, працює за замовчуванням у Chrome 35
Konstigt

@Konstigt: Це не те, що повідомлення не працювали; це те, що сповіщення не були рідними сповіщеннями Linux, а існуючі рішення (принаймні, перші два посилання вище) використовували застарілий метод. (Я особисто за це не звинувачую Chrome (ium).)
saiarcot895,

У мене немає .config/chromium/NativeMessagingHostsпапки.
umpirsky

3
Людина, ти справді повинен написати свій плагін і опублікувати його в Google Store. Якщо ви не бажаєте платити 5 доларів за реєстрацію, я можу це зробити за вас.
Błażej Michalik

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.