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_origins
bagian 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.js
perlu 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.webkitNotifications
dan (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) + "/";
}
chrome://flags/#enable-native-notifications
.