La inyección de CSS falla al utilizar la statement en content_scripts, pero funciona cuando se carga a través de JavaScript inyectado

He observado que la forma esperada de inyectar CSS en una página de terceros no parece estar funcionando correctamente.

Partes relevantes de manifest.json:

"content_scripts": [ { "matches": ["*://*.youtube.com/watch?v*"], "css": ["css/youTubeInject.css"], "all_frames": true, "js": ["js/thirdParty/underscore.js", "js/thirdParty/jquery.js", "js/youTubeInject.js"] } ] 

Aquí declaro que me gustaría inyectar algo de CSS y algo de JavaScript en las páginas que coincidan con la expresión regular de YouTube.

Mi JavaScript todo se inyecta bien. Mi CSS no se inyecta en absoluto. He revisado tres veces la ubicación del archivo y los nombres.

La parte superior de youTubeInject.js contiene:

 $(function () { var style = document.createElement('link'); style.rel = 'stylesheet'; style.type = 'text/css'; style.href = chrome.extension.getURL('css/youTubeInject.css'); document.head.appendChild(style); 

Esto hace que mi CSS se cargue correctamente y es una solución válida para el problema.

¿Alguien tiene alguna sugerencia, o un error que pueda rastrear, para este problema? ¡Sería apreciado!

Parece que Chrome ignora la cadena de consulta y el fragmento de ubicación cuando comprueba si se debe aplicar el archivo CSS declarado en el archivo de manifiesto.

http://www.youtube.com/watch?v=VIDEOID se ve como
http://www.youtube.com/watch .

Su patrón de coincidencia incluye una parte de la cadena de consulta, lo que hace que el patrón no coincida en absoluto.

Actualmente, el comportamiento de “coincidencias” es inconsistente:

  Documentación
     Patrón: https: //*.google.com/foo*bar
     Lo que hace: Matches (...) ruta comienza con / foo y termina con barra
 "js" en el archivo de manifiesto
     Comprueba si el patrón coincide con el esquema: // host / path?
     Ejemplo: https://google.com/foo?bar
     No ejemplo: https://google.com/foobar?
 "css" en el archivo de manifiesto
     Comprueba si el patrón coincide con el esquema: // host / ruta
     Ejemplo: https://google.com/foobar?thisisignored
     No ejemplo: https://google.com/foo?bar
 En todos los casos, el fragmento de ubicación (también conocido como hash de ubicación) se ignora.

Este error ha sido reportado hace más de 2 años, pero no se recuperó:

  • Problema 68561: las ‘coincidencias’ de los manifiestos de contenido se aplican de forma inconsistente

Hay otro error, posiblemente relacionado, que tiene más seguidores:

  • Problema 100106: la exclusión de dominios de los scripts de contenido no funciona para los archivos CSS