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.gsfunction 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)
我在同一个问题上失去了几个小时.解决方案很简单.
将脚本部署为webapp时,会得到两个URL:/dev
一个和/exec
一个.您应该使用/exec
一个来进行跨域POST请求.在/dev
一个总是私人的:它需要被授权和没有设置*允许来源头.
PS.:/exec
一个似乎被冻结 - 它不反映代码的任何更改,直到您使用新版本字符串(部署对话框中的下拉列表)手动部署它.要使用/dev
URL 调试最新版本的脚本,只需安装另一个浏览器并禁用它的网络安全功能(- GoogleChrome中的--disable-web-security).
只是为那些只对我这样的POST请求感兴趣的人更简单:
function doPost(e){
//do stuff ...
var MyResponse = "It Works!";
return ContentService.createTextOutput(MyResponse).setMimeType(ContentService.MimeType.JAVASCRIPT);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11102 次 |
最近记录: |