2010-04-21 13 views
8

Sto costruendo un'estensione per Firefox che aggiunge elementi HTML a determinate pagine di un sito web. Voglio averlo inserire un file CSS personalizzato per lo stile di quegli elementi. Funziona se inserisco i tag con il CSS direttamente nella pagina, ma questa è una soluzione tutt'altro che ideale.Inserimento di CSS con un'estensione per Firefox

Esiste comunque la possibilità di caricare e analizzare un file CSS, come se avessi usato il tag nell'intestazione, o sono bloccato in qualche modo ad inserirlo?

+0

La barra degli strumenti di Firefox Extension Developers consente di aggiungere "Foglio di stile utente" all'interno della voce di menu CSS e applica immediatamente gli stili alla pagina caricata. Questa sembra essere la funzionalità che desideri. Forse puoi stare lì. https://addons.mozilla.org/de/firefox/addon/60 –

+0

Se lo si inline, il browser lo carica e lo analizza automaticamente. Non vedo il problema con questo approccio, se ti sta dando l'effetto desiderato. A proposito, questo è un possibile duplicato di http://stackoverflow.com/questions/2731736/how-can-a-firefox-extension-inject-a-local-css-file-into-a-webpage – MatrixFrog

risposta

17

chrome: // non funziona perché la pagina in cui si sta inserendo non è autorizzata ad accedere a file al di fuori del dominio (compresi gli URI di Chrome). Questo è vero anche tu sei quello che inserisce il link, perché il link è ancora eseguito nel contesto della pagina di destinazione. Invece hai due opzioni:

È possibile definire un alias del protocollo risorsa nel manifest e quindi utilizzare un URI di risorsa per accedere al CSS. Ad esempio, il seguente chrome.manifest vi permetterà di inserire il css come resource://myextresource/myfile.css:
content myext content/
resource myextresource content/css/
Vedi MDN Chrome registration per maggiori informazioni. Vedi anche How can a Firefox extension inject a local css file into a webpage? per una domanda simile.

Oppure, è possibile aggiungere il CSS come USER_SHEET utilizzando quanto segue. Ciò renderà il tuo CSS disponibile su tutte le pagine, quindi assicurati di utilizzare selettori davvero unici. Un avvertimento con questo approccio è che la pagina CSS ha la precedenza sui fogli degli utenti. È possibile utilizzare! Importante per sovrascriverlo, ma la pagina CSS può ancora trionfare se utilizza! Anche importante.

var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"] 
    .getService(Components.interfaces.nsIStyleSheetService); 
var ios = Components.classes["@mozilla.org/network/io-service;1"] 
    .getService(Components.interfaces.nsIIOService); 
var uri = ios.newURI(url, null, null); 
sss.loadAndRegisterSheet(uri, sss.USER_SHEET); 
+0

Che cosa è ' url' in 'var uri = ios.newURI (url, null, null);'. Quello che voglio realizzare è inserire i css personalizzati di jquery in una pagina specifica. Sarò in grado di farlo usando la seconda opzione che hai suggerito? Posso farlo usando FF addon builder (senza usare l'SDK) ?? –

+0

url è il percorso di un file CSS locale. Credo che tu possa usare resource: //, chrome: //, file: // per questo dato che lo chiami dal codice fidato. – studgeek

+0

Non ho utilizzato personalmente l'Add-on Builder, ma si afferma che è possibile chiamare le API XPCOM (che è quello che sto mostrando nel 2 ° esempio) nella parte inferiore di questa pagina - https://addons.mozilla.org/ it-IT/sviluppatori/docs/sdk/ultima/dev-guida/guide/sdk-vs-xul.html. – studgeek

Problemi correlati