#google-apps-script #google-forms #google-form-quiz
#google-apps-script #google-forms #google-форма-викторина
Вопрос:
Я хочу использовать app script в своей форме Google для автоматической отправки формы через 20 минут, если пользователь не нажмет на «Отправить» в течение 20 минут. В любом случае, чтобы реализовать это????
Ответ №1:
Нет, вы не можете управлять клиентской частью Google Forms, даже если вы добавите в нее скрипт Apps, поскольку скрипт Apps выполняется на сервере.
Одним из возможных решений является использование вашей формы в качестве веб-приложения Google Apps Script. На этом этапе вы можете написать клиентский JavaScript и использовать window.setTimeout
его для отправки формы через 20 минут.
Вот несколько примеров файлов, Code.gs
и quiz.html
, которые могут предоставить базовый скелет для запуска веб-приложения. Пустой проект будет иметь Code.gs
файл по умолчанию, затем вам нужно добавить File> New> HTML file, чтобы запустить другой файл.
Вы можете ввести id
любую электронную таблицу, которой вы владеете, в закомментированные строки, Code.gs
чтобы добавить ответ в эту электронную таблицу. (Вы также можете автоматизировать этот процесс, создав новую электронную таблицу по мере необходимости. Пример создания электронной таблицы для хранения данных для примера сценария приложений можно найти здесь.
// file Code.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile("quiz");
}
function doPost(request) {
if (request.answer) {
console.log(request.answer); // View > Execution transcript to verify this
//var ss = SpreadsheetApp.openById(id).getSheetByName("Quiz Responses");
//ss.appendRow([request.answer /* additional values comma separated here */ ]);
}
}
<!DOCTYPE html>
<!-- file quiz.html -->
<html>
<head>
<base target="_top">
</head>
<body>
<h1>Quiz</h1>
<form>
What is Lorem Ipsum?
<input name="loremipsum" type="text"/>
<button>Submit</button>
</form>
<script>
const button = document.querySelector("button");
const timeLimitMinutes = 1; // low number for demo; change to 20 for application
const timeLimitMilliseconds = timeLimitMinutes * 60 * 1000;
// For this demo we are not going to serve a response page, so don't try to.
button.addEventListener("submit", submitEvent => submitEvent.preventDefault());
// attach our custom submit to both the button and to the timeout
button.addEventListener("click", submitForm)
window.setTimeout(submitForm, timeLimitMilliseconds)
function submitForm() {
button.setAttribute("disabled", true);
document.querySelector("h1").textContent = "Quiz submitted";
// for demo: submitting just a single answer.
// research Apps Script documentation for rules on submitting forms, certain values not allowed
// consider a helper function `makeForm()` that returns a safe object to submit.
const answer = document.querySelector("input").value;
google.script.run.doPost({ answer });
}
</script>
</body>
</html>
Протестируйте с помощью Publish> Deploy as web app…
Комментарии:
1. Именно это я и хочу. Можете ли вы объяснить, как это реализовать??