Службы 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");
Ответы
Ответ 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);
}