Estoy migrando mi extensión de V2 a V3. Ahora todo funciona bien excepto por una cosa. En mi versión V2 hice
const actualCode = '(' + function () { 'console.log("demo");' } + `)();`; const script = document.createElement('script'); script.textContent = actualCode; (document.head || document.documentElement).appendChild(script); script.remove(); Tenga en cuenta que console.log("demo") es una simplificación de lo que necesito inyectar :)
Necesito inyectar algo de javascript para que mi chrome-extension-magic tenga lugar.
Ahora, en V3 esto ya no funciona. Recibo el siguiente error en mi devtools-console
content.js:23114 Refused to execute inline script because it violates the following ContentSecurity Policy directive: "script-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-tN52+5...6d2I/Szq8='), or a nonce ('nonce-...') is required to enable inline execution.En la guía de migración noté esta sección.
"content_security_policy": { "extension_pages": "...", "sandbox": "..." }pero no hay mucha descripción allí, así que esto es mágico para mí. Así que espero que alguien me pueda ayudar con esto.
Consulte Usar un script de contenido para acceder a las funciones y variables de contexto de la página
Dado content scripts se ejecutan en un entorno de "mundo aislado", no podemos realizar algunas operaciones dom especiales en content_script js.
// document_start.js var s = document.createElement('script'); s.src = chrome.runtime.getURL('inject.js'); s.onload = function() { this.remove(); }; (document.head || document.documentElement).appendChild(s);ejemplo de manifest.json para ManifestV3
"content_scripts": [ { "matches": ["<all_urls>"], "js": ["document_start.js"], "run_at": "document_start" //default document end } ] "web_accessible_resources": [{ "resources": ["inject.js"], "matches": ["<all_urls>"] }]