เปิดใช้งานการแจ้งเตือนพื้นเมืองของ Chrome


11

ฉันพยายามรับการแจ้งเตือนแบบเนทีฟให้ทำงานโดยใช้ Google Chrome (หรือ Chromium) บน Ubuntu แต่ก็ยังไม่มีโชค

สิ่งที่ฉันได้ลองไปแล้ว:

และฉันจำได้ว่าฉันลองใช้ส่วนขยายอื่นด้วย แต่ฉันจำชื่อไม่ได้

ไม่ทำงานเลย ฉันได้รับการแจ้งเตือนตามปกติของ Chrome อยู่เรื่อย ๆ

ฉันใช้ Google Chrome 34.0.1847.137 บน Ubuntu 14.04 x64

มีใครช่วยบอกวิธีทำงานนี้ให้ฉันได้บ้าง


1
Google Chrome Stable รุ่นล่าสุด (59 ในขณะนี้) รองรับการเปิดใช้งานการตั้งค่าการแจ้งเตือนดั้งเดิมซึ่งทำงานได้อย่างสมบูรณ์บน Gnome Shell chrome://flags/#enable-native-notificationsมันสามารถใช้ได้ผ่านทาง
emi

คำตอบ:


10

สำหรับ LibNotify ไฟล์ JSON ที่ติดตั้งมี ID ส่วนขยายที่ไม่ถูกต้อง การอัพเดต ID ส่วนขยายให้ถูกต้องจะแก้ไขได้

ไปที่.config/google-chrome/NativeMessagingHosts(สำหรับ Google Chrome) หรือ.config/chromium/NativeMessagingHosts(สำหรับ Chromium) เปิดไฟล์ JSON ในโฟลเดอร์และแจ้งให้ทราบว่าในallowed_originsส่วนที่จะช่วยให้ gphchdpdmccpjmpiilaabhpdfogeiphfID อย่างไรก็ตาม ID ส่วนขยาย (อย่างน้อยในกรณีของฉัน แต่มันควรจะเหมือนกันสำหรับทุกคน) epckjefillidgmfmclhcbaembhpdeijgเป็นจริง

ในการแก้ไขปัญหานี้ให้แทนที่ ID ส่วนขยายที่ไม่ถูกต้องด้วยรหัสที่ถูกต้องหรือเพิ่มเครื่องหมายจุลภาคและรหัสส่วนขยายที่ถูกต้องหลังจากนั้น ฉันเลือกตัวเลือกหลังส่วนตัวและนี่คือลักษณะของไฟล์ 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/"
  ]
}

แก้ไข: นั่นไม่ใช่การเปลี่ยนแปลงเพียงอย่างเดียวที่จำเป็นต้องทำ ส่วนขยายนี้ขึ้นอยู่กับการแจ้งเตือนของ Webkit ซึ่งเลิกใช้และลบออกใน Chrome (ium) และเบราว์เซอร์อื่น ๆ ที่น่าจะสนับสนุน HTML5 ได้ ดังนั้นจึงgoogle-chrome/default/Extensions/epckjefillidgmfmclhcbaembhpdeijg/1.0_0/notify_hook.jsต้องมีการอัพเดท ฉันได้เขียนสคริปต์สั้น ๆ สำหรับสิ่งนี้ แต่มันก็ทำลายมาตรฐานส่วนใหญ่ยกเว้นการแสดงการแจ้งเตือน แทนที่ทุกอย่างในไฟล์ด้วยสิ่งต่อไปนี้ (เพิ่มการสนับสนุนขั้นพื้นฐานสำหรับไซต์ที่ยังคงใช้งานอยู่window.webkitNotificationsและ (หวังว่า) การสนับสนุนภาพที่ได้รับการปรับปรุง) (เพิ่มการรองรับการอนุญาต):

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
มันใช้งานได้และการใช้งาน CPU ดูเหมือนว่าจะแก้ไขเองแล้ว อย่างไรก็ตามยังคงไม่ทำงานในแอปพลิเคชันที่ฉันต้องการ ( Webogram ) แต่ขอบคุณมากสำหรับคำตอบและความพยายามของคุณและฉันจะรอให้ Chrome สนับสนุนการแจ้งเตือนดั้งเดิม!
Louis Matthijssen

โปรดดูความคิดเห็นของฉันด้านล่างใช้งานได้ตามค่าเริ่มต้นบน Chrome 35
Konstigt

@Konstigt: ไม่ใช่การแจ้งเตือนที่ไม่ทำงาน นั่นคือการแจ้งเตือนไม่ใช่การแจ้งเตือนดั้งเดิมของ Linux และการแก้ปัญหาที่มีอยู่ (อย่างน้อยสองลิงก์แรกด้านบน) ใช้วิธีการที่เลิกใช้แล้ว (โดยส่วนตัวแล้วฉันไม่ตำหนิ Chrome (ium) สำหรับเรื่องนี้)
saiarcot895

ฉันไม่มี.config/chromium/NativeMessagingHostsโฟลเดอร์
umpirsky

3
ผู้ชายคุณควรเขียนปลั๊กอินของคุณเองและโพสต์ลงใน Google Store หากคุณไม่อยากจ่ายเงิน 5 $ สำหรับการลงทะเบียนฉันสามารถทำได้เพื่อคุณ
Błażej Michalik

0

ตอนนี้มันทำงานบน Unity โดยค่าเริ่มต้นหลังจากติดตั้ง Chrome 35

http://www.webupd8.org/2014/05/google-chrome-stable-35-for-linux.html


6
สิ่งเหล่านี้ไม่ใช่การแจ้งเตือนของ Unity มันเป็นแค่สกินใหม่สำหรับการแจ้งเตือนของ Chrome
Louis Matthijssen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.