如果您為指令碼建立使用者介面,請將指令碼發布為網頁應用程式。舉例來說,如果指令碼可讓使用者與支援團隊成員預約時間,最好以網路應用程式的形式呈現,方便使用者直接透過瀏覽器存取。
只要符合下列條件,獨立指令碼和繫結至 Google Workspace 應用程式的指令碼都可以轉換為網頁應用程式。
網頁應用程式規定
如要將指令碼發布為網路應用程式,必須符合下列條件:
- 包含
doGet或doPost函式。 - 此函式會傳回 HTML 服務
HtmlOutput物件或 Content 服務TextOutput物件。
要求參數
當使用者造訪應用程式,或程式傳送 HTTP GET 要求給應用程式時,Google Apps Script 會執行 doGet 函式。當程式傳送 HTTP POST 要求給應用程式時,Apps Script 會改為執行 doPost。在這兩種情況下,e 引數代表事件參數,可包含任何要求參數的相關資訊。下表顯示事件物件的結構:
| 欄位 | |
|---|---|
e.queryString |
網址查詢字串部分的值,或 name=alice&n=1&n=2 |
e.parameter |
鍵/值組合物件,對應於要求參數。如果參數有多個值,系統只會傳回第一個值。 {"name": "alice", "n": "1"} |
e.parameters |
與 {"name": ["alice"], "n": ["1", "2"]} |
e.pathInfo |
|
e.contextPath |
未使用,一律為空字串。 |
e.contentLength |
POST 要求的請求內文長度,或 GET 要求的長度 332 |
e.postData.length |
與「 332 |
e.postData.type |
POST 主體的 MIME 類型 text/csv |
e.postData.contents |
POST 主體的內容文字 Alice,21 |
e.postData.name |
一律為「postData」值 postData |
將 username 和 age 等參數傳遞至下列網址:
https://script.google.com/.../exec?username=jsmith&age=21
顯示參數,如下所示:
function doGet(e) {
var params = JSON.stringify(e);
return ContentService.createTextOutput(params).setMimeType(ContentService.MimeType.JSON);
}
在上述範例中,doGet 會傳回下列輸出內容:
{
"queryString": "username=jsmith&age=21",
"parameter": {
"username": "jsmith",
"age": "21"
},
"contextPath": "",
"parameters": {
"username": [
"jsmith"
],
"age": [
"21"
]
},
"contentLength": -1
}
系統會保留下列參數名稱,請勿在網址參數或 POST 主體中使用:
csid
使用這些參數可能會導致 HTTP 405 回應,並顯示「Sorry, the file you have requested does not exist.」(抱歉,您要求存取的檔案不存在) 錯誤訊息。如果可以,請更新指令碼,使用不同的參數名稱。
將指令碼部署為網頁應用程式
如要將指令碼部署為網路應用程式,請按照下列步驟操作:
- 依序按一下指令碼專案右上方的「部署」 >「新增部署」。
- 按一下「選取類型」旁邊的「啟用部署類型」 >「網頁應用程式」。
- 在「部署設定」下方的欄位中,輸入網頁應用程式的相關資訊。
- 按一下 [Deploy] (部署)。
與要使用應用程式的人分享網頁應用程式網址,前提是您已授予他們存取權。
如果網頁應用程式的擁有權變更為共用雲端硬碟或不同網域中的帳戶,應用程式就會停止運作。如要修正這個問題,請讓新擁有者或協作者在新網域中重新部署 Web 應用程式。或者,如果將網頁應用程式移回原始網域,網頁應用程式就會再次開始為該網域運作,不必重新部署。
測試網頁應用程式部署作業
如要將指令碼當做網路應用程式測試,請按照下列步驟操作:
- 在指令碼專案的右上角,依序點選「部署」>「測試部署作業」。
- 按一下「選取類型」旁邊的「啟用部署類型」 「網頁應用程式」>。
- 按一下網頁應用程式網址下方的「複製」。
在瀏覽器中貼上網址,然後測試網路應用程式。
這個網址結尾為
/dev,只有具備指令碼編輯權限的使用者才能存取。這個應用程式執行個體一律會執行最近儲存的程式碼,且僅適用於開發期間的測試。
如要在網頁應用程式上測試精細 OAuth 功能,請確認專案尚未取得任何授權。如要使現有授權失效,請使用 ScriptApp.invalidateAuth。對於已部署並以有效使用者身分執行的任何網頁應用程式,請修改資訊清單中的 executeAs JSON 欄位,將其設為 USER_DEPLOYING。
部署網路應用程式以開發人員身分執行時,請務必謹慎處理透過 ScriptApp.getOAuthToken 取得的 OAuth 權杖。其他應用程式可透過這些權杖存取您的資料,因此請勿將權杖傳輸給用戶端。
權限
網頁應用程式的權限取決於您選擇執行應用程式的方式:
- 以我的身分執行應用程式:在這種情況下,無論誰存取網路應用程式,指令碼一律會以指令碼擁有者 (也就是您) 的身分執行。
- 將應用程式做為網路應用程式執行:在這種情況下,指令碼會以使用網路應用程式的有效使用者身分執行。這種授權方式會導致網路應用程式在使用者授權存取時,顯示指令碼擁有者的電子郵件地址。
為防止濫用,Apps Script 會限制新使用者授權網頁應用程式 (以使用者身分執行) 的速率。這些限制取決於發布帳戶是否屬於 Google Workspace 網域,以及其他因素。
使用共用雲端硬碟協作處理網頁應用程式。部署共用雲端硬碟中的網路應用程式時,如果選擇「以您的身分執行」,網路應用程式會以部署者的授權執行 (因為沒有指令碼擁有者)。
在 Google 協作平台中嵌入網頁應用程式 {:#embed-web-app}
內嵌網頁應用程式仍須遵守存取權限規定,以防遭到惡意使用。如果嵌入的網頁應用程式無法正常運作,請檢查網頁應用程式擁有者和網域管理員設定的權限,確認是否允許使用。
如要在 Google 協作平台中嵌入網頁應用程式,必須先部署該應用程式。此外,您還需要「Deploy」(部署)對話方塊中的「Deployed URL」(已部署網址)。
如要在 Sites 頁面中嵌入網頁應用程式,請按照下列步驟操作:
- 開啟要新增網頁應用程式的 Google 協作平台頁面。
- 依序選取「插入」>「內嵌網址」。
- 貼上網頁應用程式網址,然後按一下「新增」。
網頁應用程式會顯示在頁面預覽的框架中。發布網頁後,網站檢視者可能需要授權網頁應用程式,才能正常執行。未經授權的網路應用程式會向使用者顯示授權提示。
網頁應用程式和瀏覽器歷史記錄
如要模擬多頁面應用程式,或使用網址參數控制動態 UI 的應用程式,請定義狀態物件來代表應用程式的 UI 或頁面,並在使用者瀏覽應用程式時,將狀態推送至瀏覽器記錄。請監聽記錄事件,以便使用者透過瀏覽器按鈕來回瀏覽時,網頁應用程式顯示正確的 UI。在載入時查詢網址參數,讓應用程式根據這些參數動態建構 UI,允許使用者以特定狀態啟動應用程式。
Apps Script 提供兩個非同步用戶端 JavaScript API,協助建立連結至瀏覽器記錄的網頁應用程式:
google.script.history提供的方法可動態回應瀏覽器記錄變更。包括:將狀態 (您定義的簡單物件) 推送到瀏覽器記錄、取代記錄堆疊中的頂端狀態,以及設定接聽程式回呼函式,以便回應記錄變更。google.script.url提供方法,可擷取目前網頁的網址參數和網址片段 (如有)。
這些記錄 API 僅適用於網頁應用程式。側欄、對話方塊或外掛程式不支援這些功能。此外,我們也建議不要在內嵌於 Google 協作平台的網頁應用程式中使用這項功能。