Aktywuj natywne powiadomienia Chrome

11

Staram się, aby natywne powiadomienia działały za pomocą Google Chrome (lub Chromium) na Ubuntu, ale jak dotąd nie mam szczęścia.

Rzeczy, które już próbowałem:

I pamiętam, że próbowałem również innego rozszerzenia, ale nie pamiętam jego nazwy.

Żaden z nich nie działa. Ciągle otrzymuję normalne powiadomienia o samym Chrome.

Używam Google Chrome 34.0.1847.137 na Ubuntu 14.04 x64.

Czy ktoś może mi powiedzieć, jak to działa?

Louis Matthijssen
źródło
1
Najnowsza wersja Google Chrome Stable (obecnie 59) obsługuje flagę Enable Native Notifications, która działa idealnie na Gnome Shell. Jest dostępny za pośrednictwem chrome://flags/#enable-native-notifications.
emi

Odpowiedzi:

10

W przypadku LibNotify instalowany plik JSON ma niepoprawny identyfikator rozszerzenia. Aktualizacja identyfikatora rozszerzenia do poprawnego go naprawia.

Przejdź do .config/google-chrome/NativeMessagingHosts(dla Google Chrome) lub .config/chromium/NativeMessagingHosts(dla Chromium). Otwórz plik JSON w folderze i zauważ, że w allowed_originssekcji pozwala on na rozszerzenie ID gphchdpdmccpjmpiilaabhpdfogeiphf. Jednak identyfikator rozszerzenia (przynajmniej w moim przypadku, ale powinien być taki sam dla wszystkich) jest w rzeczywistości epckjefillidgmfmclhcbaembhpdeijg.

Aby to naprawić, zastąp niepoprawny identyfikator rozszerzenia poprawnym lub dodaj przecinek i poprawny identyfikator rozszerzenia po nim. Ja osobiście wybrałem tę drugą opcję, a oto jak wygląda mój plik 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/"
  ]
}

EDYCJA: To nie jedyna zmiana, którą należy wprowadzić. Rozszerzenie opiera się na powiadomieniach Webkit, które zostały wycofane i usunięte w Chrome (ium) i prawdopodobnie w innych przeglądarkach na korzyść powiadomień HTML5. Dlatego google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.jswymaga aktualizacji. Napisałem na ten temat krótki skrypt, ale łamie on większość standardu z wyjątkiem wyświetlania powiadomienia. Zamień wszystko w pliku na następujące (dodano podstawową obsługę witryn nadal używających window.webkitNotificationsi (mam nadzieję) ulepszoną obsługę obrazów) (dodano obsługę uprawnień):

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
źródło
1
Działa, a użycie procesora wydaje się rozwiązać. Jednak nadal nie działa w żądanej aplikacji ( Webogram ). Ale bardzo dziękuję za odpowiedź i wysiłek. Poczekam, aż Chrome będzie obsługiwał natywne powiadomienia!
Louis Matthijssen
Zobacz mój komentarz poniżej, domyślnie działa na Chrome 35
Konstigt
@Konstigt: Nie chodzi o to, że powiadomienia nie działały; polega na tym, że powiadomienia nie były natywnymi powiadomieniami Linuksa, a istniejące rozwiązania (przynajmniej dwa pierwsze łącza powyżej) używały przestarzałej metody. (Ja osobiście nie winię za to Chrome (ium))
saiarcot895
Nie mam .config/chromium/NativeMessagingHostsfolderu
umpirsky
3
Człowieku, naprawdę powinieneś napisać własną wtyczkę i opublikować ją w Google Store. Jeśli nie chcesz płacić 5 $ za rejestrację, mogę to zrobić za Ciebie.
Błażej Michalik,