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

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

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

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

В Google Apps Скрипт:

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

На Стороне Клиента:

скрипт.Яш
$.post(beacon_url, data, null, "json");

3 ответов


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

выполнение вызова в 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);
}

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

function doPost(e){

 //do stuff ...

 var MyResponse = "It Works!";

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

}

Я потерял пару часов с той же проблемой. Решение было тривиальным.

при развертывании скрипта как webapp вы получаете два URL-адреса:/dev один и тот /exec один. Вы должны использовать /exec один, чтобы сделать междоменные запросы POST. The /dev один всегда является частным: он требует авторизации и не устанавливает заголовок *Allow-Origin.

PS.: The /exec один, кажется, заморожен - он не отражает никаких изменений кода, пока вы не развернете его вручную строка новой версии (выпадающий список в диалоговом окне развертывания). Отладка последней версии скрипта с помощью /dev URL просто установите альтернативный браузер и отключите его функции веб-безопасности (--disable-web-security в GoogleChrome).