Me gustaría saber cómo acceder y modificar el contenido de un iframe de dominio cruzado en JavaScript dentro de una extensión web de Firefox. Entiendo las limitaciones de JavaScript normal y que modificar un iframe de dominio cruzado sería una vulnerabilidad XSS, pero creo que hay alguna forma de hacerlo en una WebExtension que no puedo encontrar. Creo esto porque los manifiestos de extensión heredados tenían opciones para permitir contenido entre dominios en la sección de permisos.
Al ver el código antiguo de las versiones heredadas de las extensiones de FireFox, parece haber opciones para el contenido de dominios cruzados para ciertos sitios web de la siguiente manera. Aunque para el nuevo FireFox WebExtension, esta no es una función que se incluye en la documentación.
"cross-domain-content": ["https://www.example.com"] Aquí está mi archivo manifest.json .
{ "manifest_version": 2, "name": "Test Extension", "version": "1.0", "content_scripts": [ { "matches": ["*://*/*"], "all_frames": true, "js": [ "js/main.js" ] } ], "permissions": [ "*://*/*", "<all_urls>", ] } Aquí está mi archivo main.js
// Code is being run within an iframe ("all_frames": true) if (window != window.top) { // Attempt to log the source of the parent iframe // If cross domain, met throws - Error: Permission denied to access property "frameElement" console.log(window.parent.frameElement.src); } Como puede ver en el archivo main.js , al intentar imprimir el código fuente del iframe principal, aparece un error como el que se muestra a continuación.
Error: Permiso denegado para acceder a la propiedad "frameElement"
Quiero saber cómo sería posible permitir que una extensión web de FireFox acceda y modifique el contenido de un iframe de dominio cruzado. No estoy seguro si es un problema de no poner el permiso correcto en el manifiesto, o si tengo que usar la API de WebExtension o algo así, simplemente no puedo encontrar nada en esto.
Además, si alguien pudiera referirme o darme algunos ejemplos de cómo modificar el contenido de un iframe de esta manera, sería muy apreciado.
El acceso directo al contenido entre dominios no es, o al menos no debería ser posible. Si bien puede haber una forma de eludir esta restricción (no he buscado exhaustivamente), no sería intencional y se consideraría un error.
A diferencia de otros tipos de extensiones de Firefox, a las WebExtensions se les otorgan permisos para acceder al contenido, como máximo, dominio por dominio. Esto es independientemente de que especifique "<all_urls>" o "*://*/*" en sus permissions de manifest.json . La especificación de varios permisos de dominio no abre el acceso al contenido de varios dominios. Abrir el acceso a contenido entre dominios sería un problema más complejo que, potencialmente, tendría su propio conjunto de errores relacionados con la seguridad. Como resultado, especificar múltiples dominios en sus permissions solo le permite inyectar scripts/CSS en múltiples URL coincidentes, sin acceso especial al contenido de varios dominios. Por lo tanto, no debería haber una forma de acceder directamente al contenido en o desde un iframe entre dominios.
Si desea acceder a ese contenido entre dominios, debe inyectar una secuencia de comandos en el iframe, o ventana de nivel superior, a la que desea acceder. Como se mencionó, su capacidad para inyectar dichos scripts/CSS es una de las cosas controladas por los permissions . Luego puede usar el paso de mensajes (ya sea desde/hacia los scripts de contenido en el marco superior/marco secundario, o retransmitidos a través de un script de fondo) para comunicarse entre los scripts que ha inyectado en los marcos de dominios cruzados.
Dado que ya está inyectando secuencias de comandos en <all_urls> y all_frames , solo necesitará implementar uno de los métodos de comunicación entre ellos mencionados anteriormente. Luego deberá solicitar la información que necesita de la otra secuencia de comandos o pasar la información a la otra secuencia de comandos para su procesamiento.