Междоменные запросы 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).