我想将联系表单发布到我的Google脚本中,该表单将向我发送电子邮件。我使用以下代码:
var TO_ADDRESS = "example@gmail.com"; // where to send form data
function doPost(e) {
var callback = e.parameter.callback;
try {
Logger.log(e); // the Google Script version of console.log
MailApp.sendEmail(TO_ADDRESS, "Contact Form Submitted",
JSON.stringify(e.parameters));
// return json success results
return ContentService
.createTextOutput(callback+
JSON.stringify({"result":"success",
"data": JSON.stringify(e.parameters) }))
.setMimeType(ContentService.MimeType.JSON);
} catch(error) { // if error return this
Logger.log(error);
return ContentService
.createTextOutput(callback+JSON.stringify({"result":"error",
"error": e}))
.setMimeType(ContentService.MimeType.JSON);
}
}
当我尝试发布到Google脚本网址时,出现以下错误:
在以下位置访问XMLHttpRequest 原产地的“ https://script.google.com/macros/s/~~myscriptid~~/exec” “ http://localhost:4200”已被CORS政策屏蔽:对 预检请求未通过访问控制检查:否 请求中存在“ Access-Control-Allow-Origin”标头 资源。
我不知道如何将CORS过滤器添加到我的Google脚本中。
我知道脚本正在运行,我已经使用此插件对其进行了测试:
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi
答案 0 :(得分:0)
据我了解,您有要在自定义域上运行的应用程序。并且它应该访问Google云上的脚本。
坏消息:您无法跳过应用程序一侧的CORS检查(直到request is simple,我认为这不是您的情况)。
您应在Google Cloud side上指定Access-Control-Allow-Origin
:
Cloud Storage允许您仅在存储桶级别设置CORS配置。您可以使用gsutil命令行工具,XML API或JSON API为存储桶设置CORS配置。有关在存储桶上设置CORS配置的更多信息,请参阅配置跨域资源共享(CORS)。有关CORS配置元素的更多信息,请参阅设置存储桶CORS。
您可以使用以下任一XML API请求URL来从包含CORS标头的Cloud Storage获取响应:
storage.googleapis.com/ [BUCKET_NAME]
[BUCKET_NAME] .storage.googleapis.com
如果由于某种原因不能解决问题,则需要使您自己的服务器作为代理工作:
您的客户端应用程序<->返回Access-Control-Allow-Origin
的后端<->谷歌云
答案 1 :(得分:0)
好几次尝试之后,我能够通过角度为8的Web应用程序表单发送数据。 解决方案很简单,在“ HttpClient.post”中,您可以输入第三个参数来建立HTTP连接标头,该标头可能与“ https://script.google.com”不正确,并且将以CORS安全性导致HTTP连接失败。>
只需不将HTTP连接标头添加为HttpClient.post的第三个参数
const object = {
title: 'Prices',
phone: '999999999',
full_name: 'Jerson Antonio',
email: 'test@example.com',
message: 'Hello, .......'
};
return this.http.post(this.API_REST_FORM, JSON.stringify(object));
答案 2 :(得分:0)
经过几个小时的CORS研究,jsonp和其他疯狂的尝试,这对我有用,以便使用一个简单的http端点:
$.post('https://script.google.com/a/acme.org/macros/s/AKfy***A4B***eo/exec?token=myprecioustoken&operation=findAll', null).done(function(response) {
console.log(response);
});
其余尝试,将这个错误丢给我:
Cross-Origin Request Blocked: The Same Origin Policy disallows
reading the remote resource at
https://script.google.com/a/utec.edu.pe/macros/s/AKfy***A4B***eo/exec?token=myprecioustoken&operation=findAll.
(Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
$.getJSON('https://script.google.com/a/acme.org/macros/s/AKfy***A4B***eo/exec?token=myprecioustoken&operation=findAll', function(result) {
console.log(result);
});
var xmlhttp = new XMLHttpRequest();
var theUrl = "https://script.google.com/a/acme.org/macros/s/AKfy***A4B***eo/exec?token=myprecioustoken&operation=findAll";
xmlhttp.open("POST", theUrl);
xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xmlhttp.send();
答案 3 :(得分:0)
最新答案,但可以正常工作...
要将数据从应用程序传递到另一个网站,只需在应用程序端使用MIME类型JAVASCRIPT,如下所示:
doGet(e){
return ContentService
.createTextOutput(e.parameter.callback + "(" + JSON.stringify(YOUR OBJECT DATA HERE)+ ")")
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
在前端按以下方式访问它:
<script>
var url = "https://script.google.com/macros/s/AKfy*****ACeR/exec?callback=loadData";
// Make an AJAX call to Google Script
jQuery.ajax({
crossDomain: true,
url: url,
method: "GET",
dataType: "jsonp"
});
// log the returned data
function loadData(e) {
console.log(e);
}
</script>
此方法可避免CROB / CROS头痛