Wix
Incrusta en un sitio de Wix un formulario HTML que envía con fetch, porque Wix ejecuta el HTML personalizado en un frame aislado que no puede navegar la página.
Wix Forms guarda los envíos en Wix y no tiene ningún ajuste para una URL de action externa. Para usar Ikiform, pon tu propio formulario en un elemento Embed HTML. Wix ejecuta ese código dentro de un iframe aislado servido desde un host aparte, filesusr.com, y eso condiciona todo lo que sigue.
Por qué el formulario envía con fetch
- El frame de Wix permite formularios, scripts, ventanas emergentes y acceso al mismo origen, pero no la navegación de nivel superior.
target="_top"no puede llevar al visitante a una página de agradecimiento. - Un envío de formulario normal cargaría el resultado dentro del pequeño frame, y las páginas de agradecimiento, error y verificación de Ikiform no se muestran dentro de frames. Los visitantes verían un frame vacío o bloqueado.
- Enviar con
fetchyAccept: application/jsonmantiene al visitante en su sitio y muestra el resultado dentro del embed.
Añade el embed
Añade un elemento Embed HTML
En el Wix Editor, abre Add Elements > Embed Code > Embed HTML. En Wix Studio está en Embed & Social. Elige Code en lugar de Website address.
Pega el formulario
Embed HTML <form id="contact" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post" novalidate> <label>Email <input name="email" type="email" autocomplete="email" required /></label> <p class="error" data-error-for="email"></p> <label>Message <textarea name="message" rows="4"></textarea></label> <p class="error" data-error-for="message"></p> <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden /> <button>Send</button> <p role="status" data-status></p> </form> <script> const form = document.querySelector("#contact"); const button = form.querySelector("button"); const status = form.querySelector("[data-status]"); form.addEventListener("submit", async (event) => { event.preventDefault(); button.disabled = true; status.textContent = "Sending"; try { const response = await fetch(form.action, { method: "POST", headers: { Accept: "application/json" }, body: new FormData(form), }); const result = await response.json(); const fields = result.ok ? {} : result.error.fields ?? {}; for (const slot of form.querySelectorAll("[data-error-for]")) { slot.textContent = fields[slot.dataset.errorFor]?.[0] ?? ""; } status.textContent = result.ok ? "Thanks, we got it." : result.error.message; if (result.ok) form.reset(); } catch { status.textContent = "Couldn't reach the server. Try again."; } finally { button.disabled = false; } }); </script> <style> body { margin: 0; font: 15px/1.5 system-ui, sans-serif; } form { display: grid; gap: 8px; } label { display: grid; gap: 4px; } input, textarea, button { font: inherit; padding: 8px 10px; border: 1px solid #d4d4d4; border-radius: 6px; } button { background: #111; color: #fff; border: 0; } .error { margin: 0; color: #b42318; font-size: 13px; } </style>El frame no hereda las fuentes ni los colores de tu sitio, así que los define el bloque
<style>. Cámbialo para que coincida con tu sitio.Ajusta el tamaño y publica
Haz el elemento lo bastante alto para que quepan los errores de campo y la línea de estado, y luego publica. El editor solo muestra un marcador de posición para el código personalizado, así que prueba en el sitio publicado.
Ajustes de spam
Deja desactivada la verificación antispam del formulario. La verificación humana de Ikiform necesita su página de verificación o un pequeño frame de ikiform.com, y ninguno de los dos puede funcionar dentro del sandbox de Wix. El honeypot y la puntuación de spam siguen funcionando en cada envío.
Dominios permitidos
Ikiform ve el host del frame, no tu dominio de Wix, porque el envío sale desde dentro del iframe. Para encontrarlo, abre tu página publicada, inspecciona el embed y lee el src del iframe.
| Dónde funciona el formulario | Añadir a Allowed domains |
|---|---|
| El frame del embed | El host exacto del src del iframe, como www-example-com.filesusr.com |
| Tu dominio de Wix o tu dominio propio | No hace falta para el embed, porque el envío nunca sale de él |
- Nunca añadas
filesusr.comsolo. Coincidiría cualquier sitio de ese host, incluidos los de otras personas. - El host del frame se deriva de la dirección de tu sitio, así que cambia si conectas un dominio nuevo. Vuelve a comprobarlo después de cambiar de dominio.
Lista de pruebas
- Publica y abre la página en producción en una ventana privada.
- Con campos definidos, envía con el email vacío. El formulario tiene
novalidate, así que el mensaje de Ikiform debería aparecer debajo del campo. - Envía un mensaje real y confirma que la línea de estado dice "Thanks, we got it." y que el envío aparece en Ikiform.
- Activa los dominios permitidos con el host del frame y vuelve a enviar. Debería seguir llegando como recibido.
Solución de problemas
| Qué ves | Por qué | Solución |
|---|---|---|
| El embed se queda en blanco o muestra una página bloqueada después de enviar | El script no se ejecutó, así que el navegador envió de forma normal e intentó cargar la página de Ikiform dentro del frame | Comprueba que el script quedó dentro del elemento y que el id del formulario es contact. |
Los envíos llegan a spam con origin_mismatch | El host del frame no está en los dominios permitidos, o pusiste tu dominio de Wix en su lugar | Añade el host exacto de filesusr.com que aparece en el src del iframe. |
La línea de estado dice Complete the human check, then send the form again. | La verificación antispam está en Ikiform, que no puede funcionar dentro del sandbox | Desactiva la verificación en este formulario. |
| La línea de estado dice que no pudo conectar con el servidor | Un bloqueador de anuncios o un filtro de red bloqueó la petición. Algunas redes bloquean el propio filesusr.com. | Prueba en otra red o en una ventana privada sin extensiones. |
| Los mensajes de error se cortan | El elemento es más bajo que el formulario | Haz el elemento más alto en el editor. |