Estoy tratando de ejecutar un script dentro de la página web desde el panel de devtool usando chrome.devtools.inspectedWindow.eval , el código funciona bien pero no puedo averiguar cómo devolver la respuesta a la devolución de llamada. Estoy agradecido por su apoyo.
guión ejecutado
const someScript = function () { alert("from panel") return 123 // i can't return }herramienta de desarrollo
Chrome.devtools.inspectedWindow.eval( //this regex convert function body to string someScript.toString().replace(/^function\s*\S+\s*\([^)]*\)\s*\{|\}$/g, ""), function (result, isException) { if (isException) { //exception always fire console.log("Result not received"); } else { console.log("Selected element: " + result); } });La última expresión evaluada del script se devuelve a la devolución de llamada.
Suponiendo que la función devuelve un valor (su función lo hace), todo lo que necesita es agregar algunos paréntesis para llamar a la función como un IIFE, sin necesidad de extraer el cuerpo de la función.
const someFunc = function () { return 123; }; chrome.devtools.inspectedWindow.eval(`(${someFunc})()`, (res, err) => { if (err) { console.warn('Error', err); } else { console.log('Result', res); } });Notas:
, en lugar de + en console.log porque este último no funciona con matrices/objetos.