Meu objetivo é que ao enviar o formulário uma página do PayPal seja aberta, mas nada aconteceu, então adicionei os logs que não registraram nada.
Os primeiros logs do console do meu código aparecem, mas os que estão dentro da função onSubmit()
não aparecem, mas também sei que a função está em execução, porque google.script.run.processForm()
está sendo chamada e também não há nenhuma mensagem de erro.
console.log("Page loaded, preparing to submit form");
window.onload = function() {
var form = document.querySelector('form');
console.log(form)
form.addEventListener('submit', onSubmit); // Listen for the submit event
}
function onSubmit(event) {
event.preventDefault();
alert("onSubmit() was called!");
console.log("Form submitted");
google.script.run
.withSuccessHandler(function(url) {
console.log("Redirecting to:", url);
if (typeof url === "string" && url.startsWith("https://")) {
window.open(url, "_self");
} else {
alert("Error: Invalid PayPal link.");
}
})
.processForm();
}
<form>
<iframe src="https://docs.google.com/forms/d/e/(private)/viewform?embedded=true" width="640" height="1169" frameborder="0" marginheight="0" marginwidth="0">Wird geladen…</iframe>
</form>
O fato de que o
alert
não é mostrado prova que seu programa nunca chega ao ponto onde o alerta deveria acontecer. Portanto, no final do exercício, não.onSubmit
é chamado .Deixando seu
iframe
de lado por um segundo, isso é possível em casos como quandovar form = document.querySelector('form');
recuperou algum outro formulário diferente do que você esperava. Imagine um HTML com dois formulários e você quer anexar um manipulador de eventos submit ao segundo formulário.querySelector('form')
não é muito específico. Veja este snippet:Você pode ver que seu seletor encontrou o primeiro formulário e anexou um evento a ele. Se você pretendia anexar o evento ao segundo formulário, então ele não funcionará como você pretendia.
Agora, com o
iframe
em jogo, sua página dentro doiframe
pode ter umform
dentro dele, mas isso é apenas enviar oform
dentro da página doiframe
, mas não oform
que encapsula oiframe
na página externa. Se você pretende enviar oform
que inclui oiframe
quando oiframe
foi enviado, você pode fazer algo como abaixo:Eu também testei acionando o
submit()
do formulário noiframe
carregamento, mas isso não detectou o envio, talvez porque não foi acionado por humanos. Mas se você fizer isso por meio de clique automático no botão de envio, então funciona.