Kích hoạt thông báo gốc Chrome


11

Tôi đang cố gắng để thông báo gốc hoạt động bằng Google Chrome (hoặc Chromium) trên Ubuntu, nhưng không có may mắn cho đến nay.

Những điều tôi đã thử:

Và tôi nhớ tôi cũng đã thử một phần mở rộng khác nhưng tôi không nhớ tên của nó.

Không ai trong số họ làm việc. Tôi tiếp tục nhận được thông báo bình thường của Chrome.

Tôi đang sử dụng Google Chrome 34.0.1847.137 trên Ubuntu 14.04 x64.

Ai đó có thể cho tôi biết làm thế nào để làm việc này?


1
Phiên bản mới nhất của Google Chrome Stable (59 như bây giờ) hỗ trợ cờ Bật thông báo gốc, hoạt động hoàn hảo trên Gnome Shell. Nó có sẵn thông qua chrome://flags/#enable-native-notifications.
emi

Câu trả lời:


10

Đố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_originsphầ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.jscầ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.webkitNotificationsvà (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) + "/";
}

1
Nó hoạt động và việc sử dụng CPU dường như đã tự giải quyết. Tuy nhiên, vẫn không hoạt động trong ứng dụng tôi muốn ( Webogram ). Nhưng cảm ơn bạn rất nhiều vì câu trả lời và nỗ lực của bạn và tôi sẽ đợi Chrome hỗ trợ các thông báo gốc!
Louis Matthijssen

Vui lòng xem nhận xét của tôi bên dưới, hoạt động theo mặc định trên Chrome 35
Konstigt

@Konstigt: Không phải là thông báo không hoạt động; đó là các thông báo không phải là thông báo gốc của Linux và các giải pháp hiện có (ít nhất là hai liên kết đầu tiên ở trên) đã sử dụng phương pháp không dùng nữa. (Cá nhân tôi không đổ lỗi cho Chrome (ium) vì điều này.)
saiarcot895

Tôi không có .config/chromium/NativeMessagingHoststhư mục.
umpirsky

3
Man, bạn thực sự nên viết plugin của riêng bạn và đăng nó lên Google Store. Nếu bạn không muốn trả 5 đô la khi đăng ký, thì tôi có thể làm điều đó cho bạn.
Błażej Michalik

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.