Đối với LibNotify, tệp JSON mà nó cài đặt có ID mở rộng không chính xác. Cập nhật ID tiện ích mở rộng để sửa lỗi.
Truy cập .config/google-chrome/NativeMessagingHosts
(đối với Google Chrome) hoặc .config/chromium/NativeMessagingHosts
(đối với Chromium). Mở tệp JSON trong thư mục và lưu ý rằng trong allowed_origins
phần này, nó cho phép ID mở rộng gphchdpdmccpjmpiilaabhpdfogeiphf
. Tuy nhiên, ID tiện ích mở rộng (ít nhất là trong trường hợp của tôi, nhưng nó phải giống nhau đối với mọi người) thực sự epckjefillidgmfmclhcbaembhpdeijg
.
Để khắc phục điều này, hãy thay thế ID tiện ích mở rộng không chính xác bằng ID chính xác hoặc thêm dấu phẩy và ID tiện ích mở rộng chính xác sau nó. Cá nhân tôi đã chọn tùy chọn thứ hai và đây là tệp JSON của tôi trông như thế nào:
{
"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: Đó không phải là thay đổi duy nhất cần phải được thực hiện. Tiện ích mở rộng phụ thuộc vào thông báo của Webkit, không được chấp nhận và bị xóa trong Chrome (ium) và có thể các trình duyệt khác có lợi cho thông báo HTML5. Do đó, google-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.js
cần phải được cập nhật. Tôi đã viết một đoạn script ngắn cho việc này, nhưng nó phá vỡ hầu hết các tiêu chuẩn ngoại trừ việc hiển thị thông báo. Thay thế mọi thứ trong tệp bằng các mục sau (đã thêm hỗ trợ cơ bản cho các trang vẫn đang sử dụng window.webkitNotifications
và (hy vọng) hỗ trợ hình ảnh được cải thiện) (hỗ trợ quyền được thêm):
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
.