Específicamente, estoy evaluando todas las imágenes en una página para ver si tienen un atributo determinado y luego agrego algunos <divs> nuevos al DOM en función de esos atributos. ¿Debo esperar a que document.ready se dispare antes de realizar estas modificaciones para garantizar que Chrome haya cargado todas las piezas necesarias del DOM?
El problema con el que me encuentro es que, a veces, document.ready tarda un poco en activarse y el usuario ya está navegando por la página, preguntándose por qué mi extensión aún no ha tenido ningún efecto. El problema suele durar solo un momento, pero es suficiente para ser molesto.
Si no me molesto en esperar a que el documento esté listo y, en su lugar, procese el documento de inmediato, todo parece funcionar; pero me pregunto si estoy teniendo suerte.
En realidad, no tienes que esperar. Puede procesar de inmediato en Content Scripts . Solo asegúrese de no usar document_start en el atributo run_at .
En document_end , los archivos se inyectan inmediatamente después de que se completa el DOM, pero antes de que se carguen los subrecursos como imágenes y marcos. document_idle (el valor predeterminado) ocurre incluso más tarde.
{ "name": "My extension", ... "content_scripts": [ { "matches": ["http://www.google.com/*"], "css": ["mystyles.css"], "js": ["jquery.js", "myscript.js"], "run_at": "document_end" } ], ... }Respuesta corta: sí.
Respuesta larga: jQuery no podrá capturar ningún elemento DOM que aún no esté renderizado. Sé que me he metido en problemas varias veces y puede ser bastante molesto depurar algo por un tiempo y luego darme cuenta de que olvidé envolver el código en un documento. Listo. Si te funciona, es porque tienes suerte. Además, no necesita envolverlo en un documento. Listo si sus scripts están en la parte inferior de su página, justo encima de su etiqueta de cuerpo de cierre.