Aktifkan pemberitahuan asli Chrome

11

Saya mencoba membuat notifikasi asli bekerja menggunakan Google Chrome (atau Chromium) di Ubuntu, tetapi sejauh ini tidak berhasil.

Hal yang sudah saya coba:

Dan saya ingat saya sudah mencoba ekstensi lain juga tetapi saya tidak ingat namanya.

Tidak ada yang bekerja. Saya terus mendapatkan notifikasi normal Chrome itu sendiri.

Saya menggunakan Google Chrome 34.0.1847.137 di Ubuntu 14.04 x64.

Adakah yang bisa memberi tahu saya cara membuatnya berfungsi?

Louis Matthijssen
sumber
1
Versi terbaru Google Chrome Stable (59 seperti sekarang) mendukung bendera Enable Native Notifications, yang berfungsi dengan sempurna di Gnome Shell. Ini tersedia melalui chrome://flags/#enable-native-notifications.
emi

Jawaban:

10

Untuk LibNotify, file JSON yang diinstal memiliki ID ekstensi yang salah. Memperbarui ID ekstensi ke yang benar memperbaikinya.

Buka .config/google-chrome/NativeMessagingHosts(untuk Google Chrome) atau .config/chromium/NativeMessagingHosts(untuk Chromium). Buka file JSON di folder, dan perhatikan bahwa di allowed_originsbagian ini, ia memungkinkan ID ekstensi gphchdpdmccpjmpiilaabhpdfogeiphf. Namun, ID ekstensi (setidaknya dalam kasus saya, tetapi harus sama untuk semua orang) sebenarnya epckjefillidgmfmclhcbaembhpdeijg.

Untuk memperbaikinya, ganti ID ekstensi yang salah dengan yang benar, atau tambahkan koma dan ID ekstensi yang benar setelahnya. Saya pribadi memilih opsi yang terakhir, dan inilah tampilan file JSON saya:

{
  "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: Itu bukan satu-satunya perubahan yang perlu dilakukan. Ekstensi ini bergantung pada pemberitahuan Webkit, yang sudah usang dan dihapus di Chrome (ium) dan kemungkinan peramban lain yang mendukung pemberitahuan HTML5. Karena itu, google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.jsperlu diperbarui. Saya telah menulis skrip pendek untuk ini, tetapi melanggar sebagian besar standar kecuali untuk menampilkan pemberitahuan. Ganti semua yang ada di file dengan yang berikut ini (menambahkan dukungan dasar untuk situs yang masih menggunakan window.webkitNotificationsdan (mudah-mudahan) meningkatkan dukungan gambar) (dukungan izin ditambahkan):

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
sumber
1
Ini berfungsi dan penggunaan CPU tampaknya telah menyelesaikan sendiri. Namun, masih tidak berfungsi di aplikasi yang saya inginkan ( Webogram ). Tetapi terima kasih banyak atas jawaban dan usaha Anda dan saya hanya akan menunggu Chrome untuk mendukung pemberitahuan asli!
Louis Matthijssen
Silakan lihat komentar saya di bawah ini, berfungsi secara default di Chrome 35
Konstigt
@Konstigt: Bukan karena notifikasi tidak berfungsi; melainkan notifikasi itu bukan notifikasi asli Linux, dan solusi yang ada (setidaknya dua tautan pertama di atas) menggunakan metode yang sudah tidak digunakan lagi. (Saya pribadi tidak menyalahkan Chrome (ium) untuk ini.)
saiarcot895
Saya tidak punya .config/chromium/NativeMessagingHostsfolder.
umpirsky
3
Man, Anda benar-benar harus menulis plugin Anda sendiri dan mempostingnya ke Google Store. Jika Anda tidak ingin membayar $ 5 untuk mendaftar, maka saya dapat melakukannya untuk Anda.
Błażej Michalik