2012-01-22 15 views
5

¿Es posible hacer que el script de contenido se inyecte solo si el tipo de contenido del documento coincide con un patrón específico? De hecho, mi objetivo es mucho más simple: necesito que mi script de contenido se haya inyectado en documentos HTML solo (por ahora, también se ha inyectado en documentos XML). Los scripts de contenido deben ser inyectados en "document_start".¿Cómo limitar el script de contenido de extensión de Chrome a un tipo de contenido específico?

Respuesta

1

Llegué a un problema similar y lo resolvió de la siguiente manera.

En lugar de limitar la variedad de documentos en los que se inyecta una secuencia de comandos de contenido, según los documentos 'Content-Type, decidí inyectar la secuencia de comandos en todos los documentos, pero ejecutarla solo en los correctos.

Esto se hace mediante el análisis de document.xmlVersion y document.doctype propiedades:

  • document.doctype no debe ser null en un documento HTML;
  • document.xmlVersion no debe ser null en un documento XML;

Por lo tanto, es fácil usar cualquiera de ellos para distinguir un tipo de otro y "enlazar" todo el material de escritura necesario solo cuando sea apropiado. En particular, uno puede inyectar un pequeño gestor de scripts, que cargará cosas adicionales, posiblemente pesadas, condicionalmente.

Chrome aún no proporciona ningún medio para limitar la inyección de scripts por tipo de documento.

0

La forma más robusta de hacerlo es a través de chrome.webRequest.onHeadersReceived, que le permite consultar y conservar la información del encabezado de respuesta (incluido Content-Type). Desafortunadamente, esta API no está disponible actualmente en versiones estables de Chrome. (Puede usar la API experimental en las versiones actuales de Chrome, pero no podrá publicar extensiones que la usen).

Una posible solución para usted es determinar si el documento inyectado está siendo tratado o no por Chrome. como XML. (Y si lo es, detenga el procesamiento del documento.) Un truco para lograr esto es verificar si document.getElementById('webkit-xml-viewer-source-xml') es null. Este elemento forma parte del visor XML de Chrome/webkit.

+0

¿Qué sucede si su secuencia de comandos de contenido agrega un agente de escucha de eventos para esperar a que se cargue el documento antes de realizar una acción? Por ejemplo, 'document.addEventListener (" DOMContentLoaded ", function() {do.stuff()};'. – cheeken

+0

Esto es lo que debo evitar, mi script debe ejecutarse primero (antes de cargar el documento). – spektom

+0

Veo. En ese caso, no tengo otras recomendaciones. Buena suerte. – cheeken

Cuestiones relacionadas