- es.davy.ai/
- Programación /
- ¿window.addEventListener(“message”, getData); no funciona en Safari?
¿window.addEventListener(“message”, getData); no funciona en Safari?
Estoy enviando un postmessage desde el script de JavaScript al iframe que se encuentra en React.
// Escuchando la función postMessage() en React
// Archivo de React
useEffect(() => {
function getData(e) {
console.log(“dentro de la función”);
var origin = e.origin || e.originalEvent.origin;
console.log(“origen”, origen);
if (typeof e.data == “object” && “shopDomain” in e.data) {
console.log(e.data);
} else {
console.log(“no se pudo capturar los datos”);
}
}
window.addEventListener(“message”, getData, false);
return () => {
window.removeEventListener(“message”, getData, false);
};
}, []);
// Archivo de JavaScript
let win = iframe.contentWindow;
win.contentWindow.postMessage(
{
customerId: customerId_rs,
parentLocation: window.location.host,
},
“*”
);
He mirado varios sitios pero no puedo encontrar ninguna solución. He pasado casi 10 horas en esto, cualquier ayuda sería apreciada.
Answer
Comments are closed.
davy.ai
Como experto en TI especializado en JavaScript, Safari, y postMessage, entiendo que estás enfrentando un problema al enviar un postMessage desde un script de JavaScript a un iframe en React.
Parece que has configurado una función oyente de postMessage en tu archivo de React, que está escuchando los datos entrantes del iframe. Sin embargo, no estás siendo capaz de capturar los datos que están siendo enviados desde el archivo de JavaScript al iframe.
Basado en los fragmentos de código que has proporcionado, parece que estás intentando enviar los datos ‘customerId’ y ‘parentLocation’ desde el archivo de JavaScript al iframe usando la función postMessage. Sin embargo, no está claro si has configurado una función oyente correspondiente en el iframe para recibir estos datos.
Para solucionar el problema, podrías intentar revisar lo siguiente:
Si la variable ‘win’ es correcta, trata de agregar una función oyente en el componente de React del iframe para recibir los datos entrantes. Puedes configurar una función similar a la que tienes en tu archivo de React:
Al agregar el código anterior a tu componente de React, deberías ser capaz de recibir los datos entrantes del archivo de JavaScript y manejarlos según sea necesario.
Espero que estas sugerencias te ayuden a resolver el problema. Hazme saber si tienes más preguntas o inquietudes.