Google Apps脚本跨域请求已停止工作

Jos*_*ann 16 javascript cross-domain cors google-apps-script

我有一个错误报告信标我使用Google Apps脚本创建,它发布为我自己运行,并且"任何人,甚至匿名"都可以访问,这应该意味着允许向GAS发送X域请求.

但是,我的浏览器现在指示Access-Control-Allow-Origin代码发布到信标后响应上没有标头.

我在这里错过了什么吗?这曾经是两个月前的工作.只要GAS发布用于公共访问,那么就是设置Access-Control-Allow-Origin标题.

在Google Apps脚本中:

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

客户端:

的script.js
$.post(beacon_url, data, null, "json");
Run Code Online (Sandbox Code Playgroud)

Spe*_*ton 19

在调用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 ){...});
Run Code Online (Sandbox Code Playgroud)

在服务器端

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


Ser*_*eyR 8

我在同一个问题上失去了几个小时.解决方案很简单.

将脚本部署为webapp时,会得到两个URL:/dev一个和/exec一个.您应该使用/exec一个来进行跨域POST请求.在/dev一个总是私人的:它需要被授权和没有设置*允许来源头.

PS.:/exec一个似乎被冻结 - 它不反映代码的任何更改,直到您使用新版本字符串(部署对话框中的下拉列表)手动部署它.要使用/devURL 调试最新版本的脚本,只需安装另一个浏览器并禁用它的网络安全功能(- GoogleChrome中的--disable-web-security).

  • @Novac你救了我的命!将请求“Content-type”从“application/json”更改为 AJAX 默认“application/x-www-form-urlencoded”解决了我的预检 405 问题! (2认同)

Dav*_*ton 5

只是为那些只对我这样的POST请求感兴趣的人更简单:

function doPost(e){

 //do stuff ...

 var MyResponse = "It Works!";

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

}
Run Code Online (Sandbox Code Playgroud)

  • 这在2018年似乎对我不起作用.我仍然收到CORS错误. (6认同)

归档时间:

查看次数:

11102 次

最近记录:

7 年,1 月 前