我有一個自定義文件,它可以同時用於服務器端a.gs以及cleint側a.js,既具有相同的功能定義使得GS文件既可以作爲應用程序的腳本文件作爲客戶端的js文件
代替有一個.gs和a.js我將如何使
function include(filename) {
return HtmlService.createHtmlOutputFromFile('<script>'+a.gs+'</script>').getContent();
}
東西像上面。
我有一個自定義文件,它可以同時用於服務器端a.gs以及cleint側a.js,既具有相同的功能定義使得GS文件既可以作爲應用程序的腳本文件作爲客戶端的js文件
代替有一個.gs和a.js我將如何使
function include(filename) {
return HtmlService.createHtmlOutputFromFile('<script>'+a.gs+'</script>').getContent();
}
東西像上面。
在你doGet
功能,您可以檢查是否特定參數存在,然後發送包含在a.gs到客戶端的代碼的全部或部分。
function doGet(e) {
if(e.parameter.func) {
var out = ContentService.createTextOutput(this[e.parameter.func].toString());
out.setMimeType(ContentService.MimeType.JAVASCRIPT);
return out;
}
}
現在你可以以該客戶端上使用myFunction
這行添加到您的HTML文件 <script type="text/javascript" src="https://script.google.com/macros/s/<id>/exec?func=myFunction"></script>
。
但是,如果你想在提供給客戶a.gs一切,不只是一個單一的功能,你可以做到這一點
function genCode2(obj) {
if(obj instanceof Array) return JSON.stringify(obj);
if(obj === null) return "null";
if(typeof(obj) === "undefined") return "undefined";
if(typeof(obj) === "object") {
var str = "{\n";
for(key in obj) {
if(typeof obj[key] === "function") {
var s = obj[key].toString() + "\n";
if(s.indexOf("[native code") < 0) str += "\"" + key + "\": " + s + ",\n";
} else {
str += "\"" + key + "\": " + genCode2(obj[key]) + ",\n";
}
}
return str + "\n}";
}
return JSON.stringify(obj);
}
function genCode(obj) {
var str = "";
for(key in obj) {
if(typeof obj[key] === "function") {
var s = obj[key].toString() + "\n";
if(s.indexOf("[native code") < 0) str += s;
} else {
str += "var " + key + " = " + genCode2(obj[key]) + ";\n";
}
}
return str + "";
}
function doGet(e) {
if(e.parameter.file === "a.gs") {
var out = ContentService.createTextOutput(genCode(this));
out.setMimeType(ContentService.MimeType.JAVASCRIPT);
return out;
}
}
然後在HTML文件中把<script type="text/javascript" src="https://script.google.com/macros/s/<id>/exec?file=a.gs"></script>
。
但另一方面,也許你可以把一個js文件放到你的谷歌驅動器中,然後你可以在a.gs
中加載併發送給客戶端或使用eval進行評估。