Sono in procinto di costruire la mia prima estensione di Safari - una molto semplice - ma ho incontrato un paio di problemi. L'estensione si riduce a un singolo script iniettato che tenta di ignorare il gestore di feed nativo e reindirizzare a un URI http: //. I miei problemi finora sono due:Domande sull'estensione del Safari
- La "whitelist" non funziona come mi aspetterei. Poiché tutti i feed sono mostrati sotto il protocollo "feed: //", ho cercato di catturarlo nella whitelist come "feed: // */*" (senza nulla nella blacklist), ma alla fine trovo una richiesta loop che non riesco a capire. Se imposto i valori della lista nera di "http://*/*" e "https://*/*", tutto funziona come previsto.
- Non riesco a capire come accedere alle mie impostazioni dal mio script immesso. Lo script crea un gestore di eventi
beforeload
, ma non può accedere alle mie impostazioni utilizzando il percorsosafari.extension.settings
indicato nella documentazione.
non ho trovato nulla nella documentazione di Apple per indicare che le impostazioni non dovrebbero essere disponibili dal mio script. Poiché le estensioni sono una funzionalità così nuova, anche Google restituisce risultati rilevanti limitati e la maggior parte di questi proviene dalla documentazione ufficiale.
Cosa mi manca?
Grazie.
UPDATE quindi spero che la documentazione è incompleta perché è borderline abissale, ma ho imparato un po 'preoccupare delle impostazioni. Si scopre che, dagli script di iniezione, l'oggetto SafariExtensionSettings
non è disponibile. Gli script di iniezione hanno accesso solo all'oggetto SafariContentExtension
(che non è affatto utile), ma è aliasato esattamente nello stesso modo (safari.extension.settings
) - cattiva idea, IMO. Come indicato nel injection script documentation:
Importante: Quando si utilizza safari.extension dall'interno di uno script iniettato, non si sta affrontando la classe SafariExtension. Stai indirizzando la classe SafariContentExtension.
È necessario utilizzare il sistema di messaggistica per parlare con un file HTML globale che ha accesso alle impostazioni. È un po 'complicato, ma ho un messaggio che viene inviato a un file global.html
che recupera le impostazioni e invierà un messaggio al mio script di iniezione non appena ho capito come fare per farlo.
Poiché eseguo tutto il mio lavoro prima che il documento venga caricato, tutti i metodi che ho trovato per inviare il messaggio indietro a si basano su un oggetto di pagina che non ho.
Dai un'occhiata agli aggiornamenti che ho aggiunto sopra. Ora so che _per_ non puoi accedere alle impostazioni e hai persino indicato come raggiungerle (anche se non funziona per me per altri motivi). –
Ho appena trovato una soluzione per il mio problema, è pubblicato sopra per voi o per chiunque altro con lo stesso problema. Forse puoi adattarlo per il tuo caso! – Mars
Grazie per l'aggiornamento. Nel mio caso, tutto il lavoro viene eseguito 'beforeload', quindi l'oggetto della pagina non è definito, il che sembra significare che il metodo' dispatchMessage() 'non è disponibile. Sto ancora cercando una soluzione alternativa. –