Estoy escribiendo un complemento para una application web de terceros, cuyo código puedo ver pero no puedo modificar. Lo estoy ejecutando en Chrome. La aplicación web principal y el complemento son paquetes de paquetes web (separados). En tiempo de ejecución, cuando se carga la página, la aplicación web obtiene los paquetes de complementos del mismo servidor y los inicializa.
Mi objetivo es hacer que mi complemento parchee/envuelva una función en la application de terceros, en el módulo webapp/utils/target.tsx , de modo que las llamadas a esa función desde la aplicación web tengan mi comportamiento modificado. Algo como esto:
// somehow import the `target` module (this is the problem, see below...) oldFunc = target.targetFunc; target.targetFunc = function targetFunc(args) { // do extra stuff here return oldFunc(args); } Pero no sé cómo importar el módulo de target o si esto es posible. Específicamente:
import target , porque la application/webapp no depende de mi complementowindow , por lo que no tienen una dependencia directa de la aplicación web.application/webapp como una dependencia porqueapplication para hacer cosas adicionales en su paquete web (como exponer target de una manera diferente) import(/*webpackIgnore: true*/ '/application/webapp/utils/target').then({ ... }) Esto me da el error Expected a JavaScript module script but the server responded with a MIME type of "text/html" .
Si ayuda, cuando la página está completamente cargada y la aplicación ha cargado mi complemento, en las herramientas de desarrollo de Chrome en Fuentes -> Página, veo una estructura de árbol como esta:
- localhost:port - . - com.mydomain.myplugin - <modules for my plugin> - application - webapp - . - <other modules> - utils - target.tsx - <other files> - webpackMientras tanto, la fuente de la página html original parece cargar la aplicación web a través de esta etiqueta en el encabezado:
<script defer="defer" src="/static/main.c4e2eaf1d8c47b01fa6c.js"></script>Las herramientas de desarrollo de Chrome dicen "Mapa fuente detectado".
¿Es posible hacer lo que estoy tratando de hacer?
Por lo que entiendo, puede import el module object , editar con el Object. library y return el módulo editado. Si no entiende nada pero conoce el núcleo, estas referencias deberían ser útiles para resolver esto.
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/import
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/export
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties