Tengo el código tomado de Inyectar una etiqueta de script con src remoto y esperar a que se ejecute :
function injectScript(src){ return new Promise((resolve, reject) => { const script = document.createElement('script'); script.src = src; console.log(script.src) script.setAttribute('type', 'text/javascript'); script.addEventListener('load', resolve); script.addEventListener('error', e => reject(e.error)); document.head.appendChild(script); }); }por escrito
injectScript((chrome.runtime.getURL("/utils.js"))) .then(() => { console.log("script loaded") }).catch(error => { console.log(error); }) Puedo inyectar con éxito mi código de utils.js (abajo) en una página html que he verificado que funciona con código html inyectado por separado con un botón con onclick="foo()"
function foo(){ console.log("bar"); } Ahora, mi pregunta es ¿cómo modifico mi función injectScript para inyectar mi código brython (abajo)? Intenté establecer el atributo de tipo en text/python pero, por lo demás, lo mantuve igual, pero esto no funciona. Del mismo modo, cambiar script.src = src a script.textContent = src no funciona. En todos los casos, simplemente no pasa nada sin un error.
***python.js*** from browser import document, alert def hello(): alert("hello world") document['mybutton'].bind('click', hello)Editar: código completo utilizado para inyectar el código brython (la consola registra 'min guión cargado' y 'stdlib script cargado' pero no 'python cargado' ni alertas 'hola mundo':
injectScript("https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.9/brython.min.js") .then(() => { console.log('min script loaded!'); injectScript("https://cdnjs.cloudflare.com/ajax/libs/brython/3.9.5/brython_stdlib.min.js") .then(() => { console.log('stdlib script loaded!'); injectPython((chrome.runtime.getURL("/python.js"))) .then(() => { console.log("python loaded") }).catch(error => { console.log(error) }) }).catch(error => { console.error(error); }); }).catch(error => { console.error(error); });