Apps Script在內部網頁之間的連結

其實在寫Apps Script的時候,總是很困擾該如何寫內部的連結。因為如果直接寫相對連結,例如,。但是寫絕對連結它又會因為deploy版本改變實際的URL。

直到看到stackoverflow的大大寫了一條getServerUrl()函數在Apps Script內...


function getServerUrl() {
return ScriptApp.getService().getUrl();
}

有了getServerUrl()我們可以有下面兩種應用情境:
  1. 使用template代換變數
    這樣每個要用html網頁都需要,需要用相對連結的時候,就要
    <a href="<?= SERVER_URL + '?show=html&nam=index' ?>">連結</a>
  2. 使用google.script.run取得getServerUrl()的內容,再組合成URL。
    這樣每次需要用相對連結的時候,都要做一次組合。例如點擊a元素就要加入一個像下面這樣的事件處理

function onClicked(event) {
google.script.run.withSuccessHandler(function (url, e) {
window.top.location = url + e.href;
}).withUserObject(event.target).getServerUrl();
}

最後是我今天才發現的簡單的第三種方法,設定base href成伺服器URL

就是用template設定base的href,首先要去改head內的base標籤,將的href設定上去

<base target="_top" href="<?= getServerUrl() ?>">

這樣在相對連結就不需要調整什麼內容了。而在javascript部份如果想取Apps Script伺服器的URL,也只要用document.baseURI就能夠取到,整體也變得簡潔了起來。


留言