Активировать родные уведомления Chrome
Я пытаюсь заставить работать нативные уведомления с помощью Google Chrome (или Chromium) в Ubuntu, но пока безуспешно.
Вещи, которые я уже пробовал:
Уведомления Libnotify в Chrome
Я бегал
install.sh
тоже (и перезапуск Chrome):$ ./install.sh Native messaging host com.initiated.chrome_libnotify_notifications has been installed.
- Chromify-OSD
И я помню, что я пробовал другое расширение, но я не помню его название.
Никто из них не работает. Я продолжаю получать нормальные уведомления самого Chrome.
Я использую Google Chrome 34.0.1847.137 на Ubuntu 14.04 x64.
Может кто-нибудь сказать мне, как заставить это работать?
2 ответа
Для LibNotify устанавливаемый файл JSON имеет неверный идентификатор расширения. Обновление идентификатора расширения до правильного исправляет его.
Идти к .config/google-chrome/NativeMessagingHosts
(для Google Chrome) или .config/chromium/NativeMessagingHosts
(для хрома). Откройте файл JSON в папке и обратите внимание, что в allowed_origins
раздел, это позволяет расширение ID gphchdpdmccpjmpiilaabhpdfogeiphf
, Тем не менее, идентификатор расширения (по крайней мере, в моем случае, но он должен быть одинаковым для всех) на самом деле epckjefillidgmfmclhcbaembhpdeijg
,
Чтобы это исправить, либо замените неправильный идентификатор расширения на правильный, либо добавьте запятую и правильный идентификатор расширения после нее. Я лично выбрал последний вариант, и вот как выглядит мой 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) + "/";
}
Теперь он работает на Unity по умолчанию после установки Chrome 35
http://www.webupd8.org/2014/05/google-chrome-stable-35-for-linux.html