2010-04-21 24 views
8

Estoy construyendo una extensión para Firefox que añade elementos HTML a ciertas páginas de un sitio web. Quiero que inserte un archivo CSS personalizado para darle un estilo a esos elementos. Funciona si inserto etiquetas con CSS directamente en la página, pero esa es una solución menos que ideal.Inserción CSS con una extensión de Firefox

¿Hay alguna forma de conseguir que cargar y analizar un archivo CSS, como si usara la etiqueta en la cabecera, o estoy atascado procesos en línea de alguna manera?

+0

Firefox Extension Developers Toolbar le permite "Agregar hoja de estilo de usuario" dentro de la entrada del menú CSS y aplica estilos inmediatamente a la página cargada. Esta parece ser la funcionalidad que desea. Quizás puedas echar un vistazo allí. https://addons.mozilla.org/de/firefox/addon/60 –

+0

Si lo alinea, el navegador lo cargará y analizará automáticamente. No veo el problema con ese enfoque, si te está dando el efecto deseado. Por cierto que este es un posible duplicado de http://stackoverflow.com/questions/2731736/how-can-a-firefox-extension-inject-a-local-css-file-into-a-webpage – MatrixFrog

Respuesta

17

chrome: // no funcionará porque la página está insertando en la que no se permite acceder a archivos fuera de su dominio (incluyendo cromo URI). Esto es cierto incluso si usted es el que inserta el enlace, porque el enlace todavía se ejecuta en el contexto de la página de destino. En su lugar, tiene dos opciones:

Puede definir un alias de protocolo de recurso en su manifiesto y luego utilizar un recurso URI para acceder a la CSS. Por ejemplo, la siguiente chrome.manifest le permitirá insertar el css como resource://myextresource/myfile.css:
content myext content/
resource myextresource content/css/
Ver MDN Chrome registration para obtener más información. También vea How can a Firefox extension inject a local css file into a webpage? para una pregunta similar.

O bien, puede añadir el CSS como USER_SHEET utilizando el siguiente. Esto hará que su CSS esté disponible en todas las páginas, así que asegúrese de utilizar selectores únicos. Una advertencia con este enfoque es que la página CSS tiene precedencia sobre las hojas de usuario. Puede utilizar! Importante para anular eso, pero la página CSS aún puede triunfar si lo hace! Importante también.

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

Lo que es ' url' en 'var uri = ios.newURI (url, null, null);'. Lo que realmente quiero lograr es insertar el css personalizado de jquery UI en una página en particular. ¿Podré hacerlo usando la segunda opción que ha sugerido? ¿Puedo hacerlo usando FF addon builder (sin usar el SDK)? –

+0

url es la ruta a un archivo CSS local. Creo que puede usar resource: //, chrome: //, file: // para ello, ya que lo está llamando desde un código de confianza. – studgeek

+0

No he utilizado personalmente el Creador de complementos, pero indica que puede llamar a las API de XPCOM (que es lo que mostraré en el segundo ejemplo) en la parte inferior de esta página - https://addons.mozilla.org/ es-ES/developers/docs/sdk/latest/dev-guide/guides/sdk-vs-xul.html. – studgeek

Cuestiones relacionadas