Google Apps Script(GAS)程式可以部署成網頁應用程式
這時候會取得一個網頁應用程式的連結,例如:https://script.google.com/macros/s/**********************/exec
可以直接透過這個網頁連結帶入url參數,例如:https://script.google.com/macros/s/**********************/exec?A=a&B=b~~
將參數傳後端程式進行處理,也可以再回傳顯示在前端網頁中
不過GAS預設是不能將程式嵌入其他網站
必須在GAS後端程式中對於用來嵌入的Html新增一個HtmlService.XFrameOptionsMode.ALLOWALL(下面的紅字部分)
var output = HtmlService.createTemplateFromFile("url").evaluate().setTitle("查詢系統");
output.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);//可以將發布成html介面的程式 崁入其他網站
return output;
整體程式分為兩個部分
Google Apps Script的程式碼(後端)
function doGet() { var output = HtmlService.createTemplateFromFile("url").evaluate().setTitle("查詢系統"); output.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);//可以將發布成html介面的程式 崁入其他網站 return output; } function searchData(u){ Logger.log(u); return u; }
網頁Html的程式碼(前端)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <h1 id="m"></h1> </body> <script> google.script.url.getLocation(function(u) { var param =u.parameter; google.script.run.withSuccessHandler(showData).searchData(param);//後端執行searchData 回傳值到showData }); var h1String = document.getElementById("m"); var message=""; function showData(u){ console.log(u); console.log(u.uid); if(u.uid !== undefined ){ message="" ; h1String.innerHTML = ""; //console.log(message); console.log(u.uid); console.log(typeof(u.uid)); if(u.uid =="m1"){ // message="數學"; console.log("1"); console.log(message); }else if(u.uid =="e1"){ message ="英文"; // console.log("2"); console.log(message); }else{ message ="其他"; console.log("3"); console.log(message); } h1String.innerHTML = message; }else{ h1String.innerHTML = "空值"; } } </script> </html> |
設計概念
因為GAS的網頁應用程式可以透過 POST / GET 方法傳入資料
如果要接收外部參數,後端程式必須要有相對應的 doPost() 或者 doGet() 來處理資料
這個是GAS將程式部署成網頁應用程式的必要設定
同時也要將引入要顯示的Html內容(前端),這樣就可以執行在前端的JavaScript程式
也就是Html內容(前端)第12行開始的google.script.url.getLocation
在後端的searchData(u)則是配合Html中的google.script.run.withSuccessHandler(showData).searchData(param)
將透過前面GAS的內部程式 google.script.url.getLocation取得網址參數param 傳到在後端的searchData(u),
然後再從後端回傳到前端的showData(u)進行處理
其實傳到後端之後就可以在GAS做很多處理
只是這邊沒有,單純再回傳到前端而已
以下是測試結果
https://script.google.com/macros/s/AKfycbxQ7k2oXw1xCLiYBhyGLllcaxvaTwGEW-Q4hoIbiu6fFnO16DQ4A9fihx9LOnYUNyYU/exec
沒有帶參數,顯示”空值”
https://script.google.com/macros/s/AKfycbxQ7k2oXw1xCLiYBhyGLllcaxvaTwGEW-Q4hoIbiu6fFnO16DQ4A9fihx9LOnYUNyYU/exec?uid=m1
uid=m1,顯示”數學”
參數對應程式設定,可以顯示想要的文字
這邊只是簡單利用帶參數的連結,配合程式再回傳設定的文字在網頁中
也可以直接使用AJAX
將HTTP呼叫的程式寫在特定的網頁之中,將參數傳入GAS網頁應用程式,在後端處理之後再回傳到前端
這樣就不需要在GAS撰寫前端Html內容了
這個部分可以參考彰化一整天的範例