Подтвердить что ты не робот

Службы Google Apps Script перестали работать междоменные запросы

У меня есть маяк сообщений об ошибках, который я создал с помощью Google Apps script, и он опубликован для запуска как сам и доступен для "любого, даже анонимного", что должно означать, что запросы X-домена на GAS разрешены.

Однако мои браузеры теперь указывают, что заголовок Access-Control-Allow-Origin отсутствует в ответе после сообщений кода в маяке.

Я что-то упустил? Это работало еще два месяца назад. Пока GAS был опубликован для публичного доступа, тогда он устанавливал заголовок Access-Control-Allow-Origin.

В Google Apps Script:

Code.gs
function doPost(data){
  if(data){
        //Do Something
  }
  return ContentService.createTextOutput("{status:'okay'}", ContentService.MimeType.JSON);
}

Сторона клиента:

script.js
$.post(beacon_url, data, null, "json");
4b9b3361

Ответ 1

При обращении к службе содержимого script я всегда отправлял обратный вызов для JSONP. Поскольку GAS не поддерживает CORS, это единственный надежный способ гарантировать, что ваше приложение не сломается при появлении проблем с x-domain.

Выполнение вызова в jQuery просто добавляет "& callback =?". Он будет отображать все остальное.

 var url = "https://script.google.com/macros/s/{YourProjectId}/exec?offset="+offset+"&baseDate="+baseDate+"&callback=?";
 $.getJSON( url,function( returnValue ){...});

На стороне сервера

function doGet(e){
 var callback = e.parameter.callback;
 //do stuff ...
 return ContentService.createTextOutput(callback+'('+ JSON.stringify(returnValue)+')').setMimeType(ContentService.MimeType.JAVASCRIPT);
}

Ответ 2

Просто, чтобы сделать его проще для тех, кто интересуется только запросом POST, как я:

function doPost(e){

 //do stuff ...

 var MyResponse = "It Works!";

 return ContentService.createTextOutput(MyResponse).setMimeType(ContentService.MimeType.JAVASCRIPT);

}