簡體   English   中英

將谷歌腳本值傳遞給 html

[英]Pass google script value to html

我一直在查看此處發布的各種其他解決方案,但它們似乎都不適合我。

我試圖將一個變量從我的谷歌腳本(最初存儲在谷歌的 PropertiesService 中)傳遞給我的 html,因為我想使用以前保存的數據作為我的文本輸入框的值(顯示以前保存的數據)。

這是我的 gs 文件(減去不相關的部分):

function openSettings() {

  var htmlTemplate = HtmlService.createTemplateFromFile('settingsForm')


  var userProperties = PropertiesService.getUserProperties();
  var time = userProperties.getProperty('selectedTime');
  htmlTemplate.timehtml = time;

  var html = htmlTemplate.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setTitle('Settings')
    .setWidth(300)
  SpreadsheetApp.getUi()
    .showSidebar(html);
  return html
}

function processForm(form) {

  var userProperties = PropertiesService.getUserProperties();

  var time = userProperties.getProperty('selectedTime');
  time = form.time;
  userProperties.setProperty('selectedTime', time);
}

這是我的 html 文件(省略了其他不相關的部分):

<!DOCTYPE html>

<html>

<div>
 <form>
   <input type="text" name="time" id="time" style="width: 40px;">
   <br><br><input type="button" class="action" onClick="writeFormData(); 
   alert('submitted')" value="Submit"/>
 </form>
</div>

<script>
  var timeInput = document.getElementById("time");
  var timehtml = time;
  timeInput.value = timehtml;
</script>

<script type="text/javascript">
       function writeFormData() {
           google.script.run.processForm(document.forms[0]);
       }
</script>

</html>

也許我的整個方法都是錯誤的。 但我想要做的是在 Google 的 PropertiesService 中存儲用戶選擇(可能想要將 userProperties 更改為 documentProperties,以使設置文檔特定),然后在側邊欄中按下提交按鈕時保存這些值。 下次打開側邊欄時,應顯示這些保存的設置。

你在正確的軌道上。 因為您已經將變量傳遞給 HtmlTemplate 對象,所以剩下的唯一步驟就是使用 GAS 模板引擎來呈現它。

.GS 文件

...
htmlTemplate.timehtml = time;
...

HTML 模板

   <input type="text" name="time" id="time" value="<?!= timehtml ?>">

更多關於 GAS 中的模板化 HTML 在這里https://developers.google.com/apps-script/guides/html/templates

您的代碼不起作用的原因是您通過設置 HtmlTemplate 對象的屬性來傳遞變量。 HtmlTemplate 和 HtmlOutput 對象僅存在於 GAS 腳本編輯器運行時的上下文中。 您的瀏覽器最終會獲取 HTML 字符串,然后將其解析為 DOM 元素並呈現。 在那個階段,任何與 GAS 相關的上下文都將丟失,您本地安裝的瀏覽器軟件將成為您代碼的新運行時環境。 這就是您不能引用“timehtml”變量的原因。

我想要一個值在我的 javascript 所以 doGet 像這樣:

function doGet(e){
  const template = HtmlService.createTemplateFromFile("index")
  template.userEmail = Session.getActiveUser().getEmail();
  return template.evaluate()
    .addMetaTag("viewport", "width=device-width, initial-scale=1.0");
}

和這樣的javascript:

// pass from BE
const _user_email = "<?!=userEmail?>";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM