После минимизации этого кода я смог увидеть, что во второй раз он отправляется, когда он не изменится на новую страницу. Он добавляет данные под кнопкой отправки. Почему это происходит? Что я могу сделать, чтобы страница открывалась правильно, как при первой отправке.
test.html
<!DOCTYPE html>
<html>
<head>
<base target = "_top">
</head>
<body>
<form id = "mainform">
<label for = "fname">First name:</label><br>
<input type = "text" id = "fname" name = "fname" value = "John"><br>
<label for = "lname">Last name:</label><br>
<input type = "text" id = "lname" name = "lname" value = "Doe"><br><br>
<input type = "submit" value = "Submit">
</form>
<script>
var loginForm = document.getElementById("mainform");
loginForm.addEventListener("submit", (e) => {
e.preventDefault();
google.script.run.withSuccessHandler(changePage).changeIt('success')
});
function changePage(page) {
document.write(page);
}
</script>
</body>
</html>
успех.html
<!DOCTYPE html>
<html>
<head>
<base target = "_top">
</head>
<body>
success!!
<form id = "mainform">
<label for = "fname">First name:</label><br>
<input type = "text" id = "fname" name = "fname" value = "John"><br>
<label for = "lname">Last name:</label><br>
<input type = "text" id = "lname" name = "lname" value = "Doe"><br><br>
<input type = "submit" value = "Submit">
</form>
<script>
var loginForm = document.getElementById("mainform");
loginForm.addEventListener("submit", (e) => {
e.preventDefault();
google.script.run.withSuccessHandler(changePage).changeIt('3rd')
});
function changePage(page) {
document.write(page);
}
</script>
</body>
</html>
3-й.html
<!DOCTYPE html>
<html>
<head>
<base target = "_top">
</head>
<body>
3rd Page should be blank but instead is showing underthe submit button.
</body>
</html>
код.gs
function doGet(e) {
return HtmlService.createHtmlOutputFromFile('test.html')
}
function changeIt(page) {
return HtmlService.createHtmlOutputFromFile(page).getContent()
}
да, могу добавить в пост
Хорошо, это здорово, но как вы планируете получить пустую страницу, если вас всегда запрашивают страницу успеха?
Наверное, я не понимаю. Когда пользователи заполняют форму и нажимают кнопку «Отправить», я хочу, чтобы это был успех.html — я думаю, что я углубился в свою проблему — я обновлю код и заголовок вопроса —
Вот ссылка на многостраничное веб-приложение.
См. предупреждение.
@themaster Спасибо за это, можете ли вы предложить решение или обходной путь?
Как написано в MDN, поведение document.write является особенным и поэтому не рекомендуется. Чтобы заменить всю страницу, используйте innerHTML
для определенного элемента, например body
с помощью getElementBy*
или корневого элемента html
с помощью documentElement.
function changePage(page) {
document.documentElement.innerHTML = page;//Make sure page isn't user entered
//document.querySelector("body").innerHTML = page
}
Обратите внимание, что использование innerHTML
представляет собой угрозу безопасности, если page
введен/изменен пользователем. Убедитесь, что источник безопасен.
есть ли в вашем проекте html-файл с именем
success.html
?