Desktop Notifications

Rakorium-M

NGBler
Registriert
14 Juli 2013
Beiträge
409
Hallo,
ich hab gerade ein Greasemonkey-Script gebastelt, dass Desktop-Benachrichtigungen erstellt, wenn neue Beiträge / PNs / Ankündigungen in der Kontrollleiste auftauchen.
Getestet mit Firefox / Greasemonkey / Darkfish, vielleicht hilft's ja noch jemandem.

[src=javascript]// ==UserScript==
// ==UserScript==
// @name NGB Desktop Notification
// @version 1
// @grant GM.setValue
// @grant GM.getValue
// @include https://ngb.to/*
// @include https://www.ngb.to/*
// ==/UserScript==

function serializeNodeList(list){
return JSON.stringify(Array.from(list).map(x => x.innerHTML));
}


const emptyList = serializeNodeList([]);

setTimeout(() => {
var headerbar = document.querySelector('#toplinks');

if (Notification.permission == 'default')
Notification.requestPermission();

var lastLocalState = emptyList;

var testForNews = async function() {
var news = headerbar.querySelectorAll('li.notifications > a');

var lastnews = await GM.getValue('ngbnotify_lastnews', emptyList);
console.log(new Date().toLocaleTimeString(), news, lastnews, lastLocalState);

var localState = serializeNodeList(news);
if (lastLocalState != localState){
if (news.length && (lastnews == emptyList || localState != lastnews)){
console.log('Notify');
new Notification('NGB.to notify', {body: 'New event on ngb.to: '+Array.from(news).map(x => x.firstChild.nodeValue+' ('+x.querySelector('sup').textContent+')').join(', ')});
}
GM.setValue('ngbnotify_lastnews', localState);
}
lastLocalState = localState;
};

testForNews();
setInterval(testForNews, 30*1000 + 100);
}, 4000);
[/src]
 
Zuletzt bearbeitet:
Das kommt bei mir eine Meldung, bei jeder ngb-Seite, die ich lade.
 
  • Thread Starter Thread Starter
  • #3
Wenn du Nachrichten bekommst, bekommst du eine Meldung pro offenem Tab. Oder meinst du die Berechtigungs-Anfrage? Die kommt so lange, bis du dem ngb erlaubst, dir Notifications zu schicken.
 
Also, mir gefällt das mit den Benachrichtungen schon sehr gut - was man bei einem Add-on machen kann, wenn in Firefox eine Notification den gleichen Namen hat, wird sie ersetzt. Vielleicht kannst du das auch machen, damit nicht bei mehreren Tabs mehrere Meldungen auftauchen?

Und zum zweiten, das "innerText" ist etwas lazy. Du könntest die Infos vielleicht noch aufbereiten. Also "Posteingang: 4 neue Nachrichten", "Abonnements: 3 neue Einträge" oder so etwas. :)

Oder du setzt einen Wert mit GM.setValue und holst den mit GM.getValue - um zu verhinden das eine Nachricht/Skript mehrfach ausgeführt wird. Um so doppelte Notifications zu vermeiden oder ähnliches.
 


Wenn ich jetzt z.B. auf dieser Seite F5 drücke, bekomme ich eine Benachrichtigung.
 
Brauche das Plugin nicht, möchte aber gerne meine Gedanken dazu abgeben. Tabübergreifend sollte es nur einmalig greifen, dazu würde ich HTML5 Webstorage nutzen, hiermit kann man tab übergreifend synchronisieren.
 
  • Thread Starter Thread Starter
  • #7
Hab ein paar Bugs gefixt und die Nachricht schöner formatiert. Außerdem sollte jetzt nur noch eine Nachricht angezeigt werden, egal wie viele Tabs offen sind.
 
Seitdem du deine Änderung eingebaut hast, erst zu informieren, wenn wirklich nicht der "alte Stand" da ist, funktioniert das super, ich orientiere mich sogar schon daran :D

Klasse Sache, danke für die Umsetzung. :T
 
Zurück
Oben