iToverDose/Software· 7 JULI 2026 · 20:04

Chrome-Erweiterung mit Sprachausgabe: So filterst du Benachrichtigungen

Eine Chrome-Erweiterung spricht Browser-Benachrichtigungen laut vor – aber nur, wenn sie bestimmte Schlüsselwörter enthalten. Erfahre, wie du die technische Umsetzung realisierst und welche Fallstricke Manifest V3 bereithält, die niemand erwähnt.

DEV Community4 min0 Kommentare

Wer kennt das nicht: Während einer intensiven Programmiersitzung wird man ständig durch Browser-Benachrichtigungen abgelenkt. Doch nicht jede Meldung ist relevant – oft reichen vier von 34 Hinweisen aus, um tatsächlich handeln zu müssen. Eine neue Chrome-Erweiterung namens Serious Notification geht dieses Problem an: Sie liest Benachrichtigungen nur vor, wenn sie bestimmte Schlüsselwörter enthalten. Doch hinter der scheinbar einfachen Idee verbergen sich zwei technische Herausforderungen, die Manifest V3 mit sich bringt – und die kaum dokumentiert sind.

Warum Standard-Content-Skripte bei Benachrichtigungen versagen

Die ursprüngliche Idee klang plausibel: Ein Content-Skript hört Benachrichtigungen ab, prüft sie auf Schlüsselwörter und spricht sie bei Übereinstimmung vor. Doch die Architektur von Chrome unter Manifest V3 macht genau das unmöglich.

Der Grund liegt im isolierten Ausführungskontext von Standard-Content-Skripten. Diese Skripte laufen in einer eigenen JavaScript-Umgebung, die zwar auf das DOM zugreifen kann, aber nicht auf globale Objekte der Webseite wie window.Notification. Wenn eine Website new Notification("Build fehlgeschlagen") aufruft, nutzt sie den Notification-Konstruktor der Seite – und dieser ist für das Content-Skript unerreichbar.

Das bedeutet: Ein reguläres Content-Skript kann zwar Benachrichtigungen nach ihrem Auftreten verarbeiten, aber nicht davor eingreifen oder sie modifizieren.

Die Lösung: MAIN-World-Content-Skripte

Manifest V3 bietet eine elegante Lösung: Content-Skripte können nun im MAIN-World-Kontext ausgeführt werden. Dafür muss die Manifest-Datei entsprechend angepasst werden:

{
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["interceptor.js"],
      "world": "MAIN",
      "run_at": "document_start"
    }
  ]
}

Skripte im MAIN-World-Kontext laufen direkt im JavaScript-Kontext der Webseite – noch bevor die Seite eigenen Code ausführt. Damit lässt sich der Notification-Konstruktor überschreiben, bevor die Seite ihn nutzt:

const OriginalNotification = window.Notification;

window.Notification = function(title, options = {}) {
  window.dispatchEvent(
    new CustomEvent('__sn_notification__', {
      detail: { title, body: options.body || '' }
    })
  );
  return new OriginalNotification(title, options);
};

Die Kehrseite: Kein Zugriff auf Chrome-APIs

Doch hier beginnt das nächste Problem: MAIN-World-Skripte haben keinen Zugriff auf Chrome-Erweiterungs-APIs wie chrome.storage, speechSynthesis oder chrome.scripting. Sie sind zwar näher an der Webseite, aber isoliert von den Funktionen, die die Erweiterung eigentlich benötigt.

Die Lösung besteht darin, die Logik auf zwei Skripte aufzuteilen:

  • `interceptor.js` (MAIN-World): Fängt Benachrichtigungen ab und löst ein benutzerdefiniertes DOM-Ereignis aus.
  • `content.js` (ISOLIERTER-World): Verarbeitet das Ereignis, liest gespeicherte Schlüsselwörter aus dem Speicher und spricht passende Benachrichtigungen vor.

Dynamische Berechtigungen: Wie du Nutzer vor dem "Zugriffs-Warnscreen" schützt

Ein weiteres großes Hindernis war die Berechtigungswarnung, die Chrome beim Installieren der Erweiterung anzeigt. Da die Erweiterung auf allen Websites Benachrichtigungen abfangen muss, war die Angabe von <all_urls> in den Berechtigungen unvermeidbar. Doch dies löste einen alarmierenden Warntext aus:

„Diese Erweiterung kann alle Daten auf allen Websites lesen und ändern.“

Die Folge: Eine deutlich höhere Abbruchrate bei der Installation. Analysen zeigten, dass etwa 33 % der Nutzer die Erweiterung nach dem Warnscreen sofort deinstallierten – noch bevor sie überhaupt eine Benachrichtigung vorlesen konnten.

Die Lösung: Optionale Host-Berechtigungen

Manifest V3 bietet eine Alternative: optionale Host-Berechtigungen. Statt die Berechtigung direkt in der Manifest-Datei zu deklarieren, wird sie erst bei Bedarf angefordert:

{
  "permissions": ["storage", "scripting"],
  "optional_host_permissions": ["<all_urls>"]
}

Erst wenn der Nutzer im Popup auf „Aktivieren“ klickt, wird die Berechtigung angefordert:

chrome.permissions.request({
  origins: ['<all_urls>']
});

Anschließend werden die Content-Skripte dynamisch registriert:

chrome.permissions.onAdded.addListener(async (permissions) => {
  if (permissions.origins?.includes('<all_urls>')) {
    await chrome.scripting.registerContentScripts([
      {
        id: 'interceptor',
        matches: ['<all_urls>'],
        js: ['interceptor.js'],
        world: 'MAIN',
        runAt: 'document_start'
      },
      {
        id: 'content',
        matches: ['<all_urls>'],
        js: ['content.js'],
        runAt: 'document_start'
      }
    ]);
  }
});

Das Ergebnis: Die Installationsaufforderung zeigt nur noch die harmlose Berechtigung „Speicher“ an. Die gefährlich klingende Warnung erscheint erst, wenn der Nutzer die Erweiterung aktiv nutzen möchte – und versteht, wofür die Berechtigung benötigt wird.

Ein kritischer Randfall: Updates und verlorene Berechtigungen

Ein oft übersehener Effekt tritt bei Updates auf: Wenn eine Berechtigung von erforderlich zu optional wechselt, entfernt Chrome sie bei bestehenden Nutzern automatisch aus den erteilten Berechtigungen. Das bedeutet:

  • Die Erweiterung wird aktualisiert.
  • Die Host-Berechtigung <all_urls> wird entfernt.
  • Die Erweiterung funktioniert nicht mehr – ohne Erklärung oder Fehlerhinweis.

Nutzer merken schlicht, dass die Benachrichtigungen nicht mehr vorgelesen werden, und deinstallieren die Erweiterung möglicherweise ohne Rückmeldung.

Empfehlung: Entwickler sollten in der background.js eine Warnung einbauen, die Nutzer über den Verlust der Berechtigung informiert, sobald die Erweiterung aktualisiert wird.

Fazit: Manifest V3 erfordert Umdenken – aber die Mühe lohnt sich

Die Entwicklung einer Chrome-Erweiterung, die Benachrichtigungen intelligent filtert und vorliest, ist mit Manifest V3 deutlich komplexer geworden. Doch die neuen Konzepte wie MAIN-World-Skripte und optionale Host-Berechtigungen bieten auch Chancen: Sie ermöglichen mehr Kontrolle über Nutzererlebnis und Sicherheit.

Wer diese Hürden meistert, kann Nutzern ein wirklich hilfreiches Werkzeug bieten – ohne sie mit unnötigen Warnungen zu verunsichern. Die Zukunft von Chrome-Erweiterungen liegt nicht nur in mehr Funktionen, sondern auch in transparenteren Berechtigungsmodellen und besseren Entwicklertools, um solche Fallstricke früh zu erkennen.

KI-Zusammenfassung

Bir Chrome uzantısıyla tarayıcı bildirimlerini belirlediğiniz anahtar kelimelerle filtreleyerek yalnızca önemlilerinin sesli okunmasını sağladım. Fark ettim ki Manifest V3 mimarisindeki iki kritik kısıtlama, projeyi hayata geçirmeyi zorlaştırıyordu. Detaylar burada.

Kommentare

00
KOMMENTAR SCHREIBEN
ID #4TBW5Z

0 / 1200 ZEICHEN

Menschen-Check

5 + 6 = ?

Erscheint nach redaktioneller Prüfung

Moderation · Spam-Schutz aktiv

Noch keine Kommentare. Sei der erste.