Safari Extension Questions

Ich bin gerade dabei, meine erste Safari-Erweiterung zu erstellen - eine sehr einfache - aber ich habe ein paar Probleme. Die Erweiterung läuft auf ein einzelnes, injiziertes Skript hinaus, das versucht, den systemeigenen Feed-Handler zu umgehen und zu einem http: // URI umzuleiten. Bisher habe ich zwei Probleme:

Die "Whitelist" funktioniert nicht wie erwartet. Da alle Feeds unter dem Protokoll "feed: //" angezeigt werden, habe ich versucht, das in der Whitelist als "feed: // * / *" zu erfassen (mit nichts in der schwarzen Liste), aber am Ende erhalte ich eine Anfrage Schleife, die ich nicht verstehen kann. Wenn ich @ setschwarze List Werte von "http: // * / *" und "https: // * / * ", alles funktioniert wie erwartet. Ich kann nicht herausfinden, wie ich über mein injiziertes Skript auf meine Einstellungen zugreifen kann. Das Skript erstellt einbeforeload Event-Handler, kann aber nicht über das @ auf meine Einstellungen zugreifsafari.extension.settings Pfad in der Dokumentation angegeben.

Ich habe in der Dokumentation von Apple nichts gefunden, was darauf hinweist, dass Einstellungen in meinem Skript nicht verfügbar sein sollten. Da Erweiterungen eine solche neue Funktion sind, gibt auch Google nur begrenzte relevante Ergebnisse zurück, die zum größten Teil aus der offiziellen Dokumentation stammen.

Was vermisse ich

Vielen Dank

AKTUALISIERE Also ich hoffe, dass die Dokumentation unvollständig ist, weil sie abgrundtief ist, aber ich habe ein bisschen über Einstellungen gelernt. Es stellt sich heraus, dass aus Injection-Skripten dasSafariExtensionSettings Objekt ist nicht verfügbar. Injection-Skripte haben nur Zugriff auf dasSafariContentExtension -Objekt (was überhaupt nicht nützlich ist), aber es ist genau in der gleichen Weise Alias safari.extension.settings) - schlechte Idee, IMO. Wie im @ angegebinjection script documentation:

Wichtig: Wenn Sie safari.extension innerhalb eines injizierten Skripts verwenden, wenden Sie sich nicht an die SafariExtension-Klasse. Sie wenden sich an die SafariContentExtension-Klasse.

Sie müssen das Messaging-System verwenden, um mit einer globalen HTML-Datei zu kommunizieren, die Zugriff auf die Einstellungen hat. Es ist ein bisschen durchgeknallt, aber ich habe eine Nachricht an ein @ gesendglobal.html -Datei, die die Einstellungen abruft und eine Nachricht an mein Injektionsskript zurücksendet, sobald ich herausgefunden habe, wie das zu tun ist.

Da ich meine gesamte Arbeit erledige, bevor das Dokument geladen wird, werden alle Methoden zum Senden von Nachrichten angezeigtzurüc Verlassen Sie sich auf ein Seitenobjekt, das ich nicht habe.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage