Получение ошибок Access-Control-Allow-Origin при отправке формы через Google Apps Script - PullRequest
1 голос
/ 08 ноября 2019

Я получаю следующие ошибки при отправке HTML form в Google Sheets через Google Apps Script:

Origin https://example.com is not allowed by Access-Control-Allow-Origin.

Fetch API cannot load https://script.google.com/macros/s/…/exec due to access control checks.

Unhandled Promise Rejection: TypeError: Origin https://example.com is not allowed by Access-Control-Allow-Origin.

На стороне сервера я ужеустановите XFrameOptionsMode.ALLOWALL, чтобы загрузить ответ в iframe:

return HtmlService.createHtmlOutputFromFile("Index").setXFrameOptionsMode(
  HtmlService.XFrameOptionsMode.ALLOWALL
)

Чего мне не хватает?


Вот моя форма:

document.getElementsByTagName("form")[0].setAttribute("target", "Response")

document.addEventListener("submit", e => {
  const form = e.target
  
  const iframe = Object.assign(document.createElement("iframe"), {
    name: "Response"
  })
 
  document.body.innerHTML = iframe.innerHTML
  
  fetch(form.action, {
    method: form.method,
    body: new FormData(form)
  })
  
  e.preventDefault()
})
<form action=https://script.google.com/macros/s/AKfycbzz-KveHder1A3CX8GcqZI6GR2MQj66PDRWNKoatIET_LXNqQs/exec method=post>  
  <fieldset>
    <legend>Select Foobar</legend>
    <label><input type=checkbox name=Foobar value=Foo>Foo</label>
    <label><input type=checkbox name=Foobar value=Bar>Bar</label>
    <label><input type=checkbox name=Foobar value=Baz>Baz</label>
  </fieldset> 
  <input type=submit value=Submit>
</form>

Форма подчиняется этому Google Sheet:

https://docs.google.com/spreadsheets/d/10VHS6bozcdNFYcRskkoONMT8Rt-2CwJ_LJGQWdkTJq4/


Веб-приложение развернуто с Me правами на выполнение и Anyone, even anonymous доступом.

1 Ответ

2 голосов
/ 09 ноября 2019

Как насчет этого ответа?

Я думаю, что ваша проблема - вернуть значение HtmlService.createHtmlOutputFromFile("Index") методом POST.

В качестве решения, например, как насчет следующегомодификация?

Шаблон 1:

В этом шаблоне изменен скрипт серверной части.

Серверная часть: Google Apps Script

function doPost(e) {

  // do something

  return ContentService.createTextOutput("ok");
}

Примечание:

  • При изменении сценария веб-приложений повторно разверните веб-приложения в новой версии. Таким образом, последний скрипт отражается на веб-приложениях. Пожалуйста, будьте осторожны.

Ссылки:

Если я неправильно понял ваш вопрос, и это не то направление, в котором вы хотите, прошу прощения.

...