2011-04-25 12 views
10

Aquí está el panorama:Cómo especificar diferentes patrones de coincidencia para varias secuencias de comandos contenidos en el archivo manifest.json de la misma extensión

Escenario 1: quiero para inyectar diferentes guiones de contenido en diferentes páginas basadas en el Dominio de URL.

Por ejemplo: Inyectar cs1.js guión contenido en www.a.com pero inyectar cs2.js guión contenido en www.b.com. Tanto los scripts de contenido cs1.js como cs2.js son parte de la misma extensión de cromo. Entonces, ¿cómo puedo especificar diferentes patrones de coincidencia (en la sección "coincidencias" mientras defino "content_scripts" en el archivo manifest.json) para que una secuencia de comandos se inyecta en una página mientras que otra se inyecta en otra página.

Escenario 2: ¿Cómo puedo mencionar, si bajo un subdominio de decir www.a.com, deseo para inyectar el guión contenido en todas las páginas en el dominio exceptowww.b.a.com (todos los otros subdominios tienen que ser inyectado con el guión de contenido). ¿Cómo especifico el patrón de coincidencia para este caso?

Gracias de antemano.

Respuesta

9

Especificar content_scripts en manifest.json es un poco limitante. Aunque puede especificar diferentes patrones de coincidencia, solo puede hacer que ejecute una posible cantidad de archivos.

Para lograr lo que desea, tendrá que configurar un background_page que pueda interpretar las URL de las páginas y ejecutar las secuencias de comandos de contenido como mejor le parezca.

tres métodos diferentes pueden ser:

  1. el uso del content_scripts el manifiesto para que coincida con todas las URL posibles y ejecutar un simple script de contenido para enviar una solicitud de mensaje a través de la página de fondo chrome.extension.sendRequest(). La página de fondo escucha los mensajes con chrome.extension.onRequest.addListener(), recibe el mensaje, interpreta la URL de la pestaña con sender.tab.url (o hace que el mensaje de la pestaña envíe window.location.hostname, probablemente más fácil), luego decide qué secuencias de comandos de contenido insertar en la pestaña a través de chrome.tabs.executeScript().

    o

  2. Sólo tienen su background_page escuchan chrome.tabs.onCreated.addListener() y chrome.tabs.onUpdated.addListener() para obtener el URL de una pestaña, y luego decidir qué guiones de contenido para inyectar a través de la pestaña chrome.tabs.executeScript(). No es necesario especificar content_scripts en el manifiesto para esto.

    o

  3. Similar a 1, pero tienen su manifiesta figura content_scripts guión en qué hacer basado en la URL actual (de nuevo pudiera interpretar window.location.hostname), a continuación, utilizar chrome.extension.sendRequest() con un mensaje para su background_page indicando qué contenido scripts para ejecutar (lo que significa que su background_page no decide; el script de contenido original sí). Mismo resultado sin embargo.

+9

En realidad, soy incorrecto. * Puedes * tener diferentes materiales de coincidencia y diferentes scripts que se ejecutan. Simplemente agregue otro objeto a la matriz 'content_scripts', con un conjunto diferente de' matches' y 'js', etc. según sea necesario. –

+0

Hola Chris, muchas gracias por las sugerencias, fueron muy útiles, especialmente la segunda respuesta (agregar otro objeto a content_script). Funcionó perfectamente. – Venkatesh

+0

Acabo de tener otra pregunta ad-hoc sobre la extensión de Chrome. ¿Cómo puedo acceder y manipular el DOM de una pestaña (https segura) que ha sido creada por la extensión (usando chrome.tabs.create) y cómo puedo acceder al DOM? de páginas https dentro de un iframe (si es posible, eso es) .. – Venkatesh

Cuestiones relacionadas