Estoy tratando de agregar un formulario de Marketo a mi aplicación Vue Js, pero parece que no funciona.
Cargué el script inicial de forms2.min.js en el enlace del ciclo de vida creado y eso se carga correctamente. Código de ejemplo a continuación.
created() { const scriptTag = document.createElement('script'); scriptTag.src = "//app-ab00.marketo.com/js/forms2/js/forms2.min.js"; scriptTag.setAttribute('charset', 'utf-8'); document.head.appendChild(scriptTag); }Dentro de la plantilla html, agregué el elemento contenedor para cargar el formulario.
<form id="mktoForm_1057"></form>Luego creé un método que se activa con un botón para cargar el formulario en el contenedor.
createForm(){ MktoForms2.loadForm("//app-ab00.marketo.com", "785-UHP-775", 1057) }Tan pronto como ejecuto el script, aparece este error "MktoForms2 no está definido". ¿Estoy haciendo algo mal?
¿Alguien podría ayudarme?
¡Gracias!
Debería ser
created() { const scriptTag = document.createElement('script'); scriptTag.src = "//app-ab00.marketo.com/js/forms2/js/forms2.min.js"; scriptTag.setAttribute('charset', 'utf-8'); scriptTag.onload = function() { MktoForms2.loadForm("//app-ab00.marketo.com", "785-UHP-775", 1057); }; document.head.appendChild(scriptTag); }Está teniendo problemas porque MktoForms2 no está definido como una variable. Tuve que agregar 'ventana' a MktoForms2 para que pasara la pelusa
window.MktoForms2.loadForm('//app-ab00.marketo.com', '785-UHP-775', 1057)Aquí hay un pequeño fragmento que he usado para las plantillas de Marketo. Asegúrese de tener su archivo forms2.min.js cargado antes de usar este script. También puede envolver esto en un DOM ready/jQuery ready también.
// check if we have their forms2.min.js script available if (window.MktoForms2) { // error handling try { MktoForms2.loadForm(baseUrl, munchkin_id, formId, function(form) { // code to execute after load form }); MktoForms2.whenRendered(function(a) { // code to execute after the form has rendered its markup var fid = a.getId(); // form id }); } catch (a) { console.log(a); } }