![激活 Chrome 原生通知](https://linux22.com/image/973387/%E6%BF%80%E6%B4%BB%20Chrome%20%E5%8E%9F%E7%94%9F%E9%80%9A%E7%9F%A5.png)
我正在尝试使用 Ubuntu 上的 Google Chrome(或 Chromium)来运行本机通知,但目前还没有成功。
我已经尝试过的事情:
-
我也运行过
install.sh
(并重新启动了 Chrome):$ ./install.sh Native messaging host com.initiated.chrome_libnotify_notifications has been installed.
- Chromify-OSD
我记得我也尝试过另一个扩展,但我不记得它的名字。
它们都不起作用。我一直收到 Chrome 本身的正常通知。
我在 Ubuntu 14.04 x64 上使用 Google Chrome 34.0.1847.137。
有人能告诉我怎样让它工作吗?
答案1
对于 LibNotify,其安装的 JSON 文件的扩展 ID 不正确。将扩展 ID 更新为正确的 ID 即可解决问题。
转到.config/google-chrome/NativeMessagingHosts
(对于 Google Chrome) 或.config/chromium/NativeMessagingHosts
(对于 Chromium)。打开文件夹中的 JSON 文件,并注意在allowed_origins
部分中,它允许扩展 ID gphchdpdmccpjmpiilaabhpdfogeiphf
。但是,扩展 ID(至少在我的情况下,但对每个人来说都应该相同)实际上是epckjefillidgmfmclhcbaembhpdeijg
。
要解决此问题,请将错误的扩展 ID 替换为正确的扩展 ID,或者在其后添加逗号和正确的扩展 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) + "/";
}
答案2
安装 Chrome 35 后,它现在默认在 Unity 上运行
http://www.webupd8.org/2014/05/google-chrome-stable-35-for-linux.html