既然Google Apps脚本的客户端与HtmlService是独立的,我希望选择独立于客户端开发它(主要是为了获得普通编辑器,js和css文件的好处而不是被打扰沙盒)。这可能意味着在服务器端脚本上实现我自己的doGet / doPost,但是我放弃了使用google.script.run直接调用函数并接受结果的精确性。
So, is there a way to use google.script.run independently?
答案 0 :(得分:1)
您可以通过网站中的AJAX请求调用Google Apps脚本内容服务并获取返回值。
Google Documentation - Content Service
这不使用google.script.run
API,但它基本上是相同的。如果你想要的是运行Apps Script服务器端代码而不向用户显示任何内容,那么你可以通过JavaScript(jQuery等)AJAX调用Apps Script Content Service应用URL来实现。
假设您有一个名为“runAjaxToGetNames”的JavaScript函数。它用以下行调用:
runAjaxToGetNames("https://script.google.com/macros/s/AKfycbyFyODk/exec");
传递的参数是Apps Script Stand Alone Content Service应用程序的URL。
AJAX函数如下所示:
function runAjaxToGetNames(argURL_forAJAX) {
console.log('runAjaxToGetNames ran: ' + argURL_forAJAX);
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
//console.log'xmlhttp.readyState: ' + xmlhttp.readyState);
if (xmlhttp.readyState===4 && xmlhttp.status===200) {
//console.log'xmlhttp.responseText: ' + xmlhttp.responseText);
glblStoreNames.names = xmlhttp.responseText;
//console.log'return value into the global object?: ' + glblStoreNames.names);
//Call a function to populate the store names
populateStoreNames();
};
};
xmlhttp.open("GET",argURL_forAJAX,true);
xmlhttp.send();
};
Apps Script内容服务是一个文件,只有以下代码:
//This Apps Script is to get a list of all the names out of a Google Doc.
function doGet() {
var theGogDocReference = DocsList.getFileById('YWY4ZmM5OQ_File_ID_Here');
var theContent = theGogDocReference.getContentAsString();
return ContentService.createTextOutput(theContent);
};