我的目标是在提交表单时打开一个 paypal 页面,但什么也没有发生,所以我添加了没有记录任何内容的日志。
我的代码的第一个控制台日志出现了,但是函数内部的日志onSubmit()
没有出现,但我也知道该函数正在运行,因为google.script.run.processForm()
正在被调用并且也没有错误消息。
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>
没有显示 的事实
alert
证明您的程序从未达到应该发生警报的点。因此在练习结束时,.onSubmit
不会调用。先不说你的
iframe
意思,在某些情况下,例如var form = document.querySelector('form');
检索到的表单与您预期的表单不同,这种情况是可能发生的。想象一下,一个 HTML 有两个表单,您想将提交事件处理程序附加到第二个表单。querySelector('form')
不是很具体。请参阅此代码片段:您可以看到选择器找到了第一个表单并向其附加了一个事件。如果您打算将事件附加到第二个表单,那么它将无法按预期工作。
现在,在
iframe
运行中,页面内部iframe
可能有一个form
,但这只是提交form
页面内部的iframe
,而不是form
封装iframe
外部页面的。如果您打算提交form
包含提交iframe
时的的iframe
,您可以执行以下操作:submit()
我还通过在加载时触发表单的按钮进行了测试iframe
,但未能检测到提交,可能是因为不是人为触发的。但如果您通过自动点击提交按钮来执行此操作,则可行。