Desde un iframe, ¿hay alguna manera de activar una función cuando se completa una búsqueda realizada por el padre?
El tema en detalle:
En un sitio web, estoy ejecutando un script externo en Google Tag Manager (que no controlo) que obtiene un conjunto de etiquetas de seguimiento. El script coloca las etiquetas en campos ocultos en un formulario en la página principal de forma predeterminada. Sin embargo, quiero que se transfieran a campos ocultos en un formulario de Hubspot iframed en esa página. Y no quiero bloquear la carga del formulario en sí.
He agregado campos ocultos de marcador de posición en la página principal para capturar los valores obtenidos. En el método de Hubspot forms.create, configuré el oyente onFormReady para ejecutar una función para obtener los valores de los campos de marcador de posición y colocarlos en los campos de formulario de hubspot.
Esto no siempre funciona, ya que onFormReady puede activarse antes de que se obtengan los valores y se agreguen a los campos de marcador de posición. Entonces, la función colocó una cadena vacía en los campos de formulario enmarcados.
No funcionó sobrescribir la solicitud de búsqueda desde el oyente de onFormReady. Encontré esta respuesta , sugiriendo usar un observador de rendimiento, que funcionó para mí. El código de inserción de mi formulario ahora se ve a continuación.
Como se mencionó, funciona, pero parece que abusa del observador de rendimiento por algo para lo que no estaba destinado y, por lo tanto, ¿no es muy robusto? Tengo curiosidad por saber si hay una solución mejor para esto.
<script> hbspt.forms.create({ //some Hubspot form properties here onFormReady: function(form) { if (!document.querySelector('input[name="UtmSource"]').value) { const observer = new PerformanceObserver((list) => { for (const entry of list.getEntries()) { if (entry.initiatorType === 'fetch' && entry.name.includes('https://whatever.com')) { addTagsToForm(); } } }); observer.observe({ entryTypes: ['resource'] }); } else { addTagsToForm(); }; function addTagsToForm() { // function to grab values from placeholder fields on parent and add to iframed fields here } } } }); </script>