创建一个非常简单的 Dynamic Google Script Web App

Creating a very simple Dynamic Google Script Web App

好的,我在开始设置动态独立 google 脚本时卡住了。我无法获得对 html 进行任何动态更改的按钮。我认为单击该按钮将调用 google 脚本代码函数并对生成的 Index.html 进行更改。我错过了什么?

Code.gs:

function doGet() {
  return HtmlService
         .createHtmlOutputFromFile('Index')
         .setTitle('DynamicTest');
}

function DoSomething() {
  var obj = document.getElementById("status");
  alert("kachow");
  obj.innerText = "It's magic!";    
}

Index.html

<!DOCTYPE html>
<html>
  <body>
  <button id="submitButton">Submit</button>
  <br />
  <div id="status">Static</div>
  <br />
  <script>
  document.getElementById('submitButton').addEventListener('click', function() {
  google.script.run.DoSomething();
  });
  </script>  
  </body>  
</html>

谢谢!




更新解决方案:感谢@Tanaike 的解决方案!这是完整的代码,它还添加了预处理消息以及在 google 脚本应用程序完成调用函数后显示的 post 处理消息:

<!DOCTYPE html>
<html>
  <body>
  <button id="submitButton">Submit</button>
  <br />
  <div id="status">Static</div>
  <br />
  <script>
  document.getElementById('submitButton').addEventListener('click', function() { 
    var obj = document.getElementById('status');
    obj.innerText = 'Processing. Please wait...';
    google.script.run.withSuccessHandler(value => {
      var obj = document.getElementById("status");
      obj.innerText = value;
    }).DoSomething();
  });
  </script>
  </body>
</html>

Code.gs

function doGet() {
  return HtmlService
         .createHtmlOutputFromFile('Index')
         .setTitle('DynamicTest');
}

function DoSomething() {
  return "It's magic!";
}

修改点:

  • 在您的脚本中,DoSomething() 似乎不是 Google Apps 脚本。我认为它是 Javascript。我认为这就是你的问题的原因。所以当下面的修改完成后,我认为脚本可以工作。

      <!DOCTYPE html>
      <html>
        <body>
        <button id="submitButton">Submit</button>
        <br />
        <div id="status">Static</div>
        <br />
        <script>
        document.getElementById('submitButton').addEventListener('click', function() {
      //    google.script.run.DoSomething();
          DoSomething();
        });
        function DoSomething() {
          var obj = document.getElementById("status");
          alert("kachow");
          obj.innerText = "It's magic!";    
        }
        </script>  
        </body>  
      </html>
    
  • 但我认为您可能希望在 Javascript 端和 Google Apps 脚本之间进行通信。所以在这种情况下,请修改如下。

修改后的脚本:

Code.gs
function doGet() {
  return HtmlService
         .createHtmlOutputFromFile('Index')
         .setTitle('DynamicTest');
}

function DoSomething() {
  return "It's magic!";
}
Index.html:
<!DOCTYPE html>
<html>
  <body>
  <button id="submitButton">Submit</button>
  <br />
  <div id="status">Static</div>
  <br />
  <script>
  document.getElementById('submitButton').addEventListener('click', function() {
    google.script.run.withSuccessHandler(value => {
      var obj = document.getElementById("status");
      alert("kachow");
      obj.innerText = value;
    }).DoSomething();
  });
  </script>
  </body>
</html>

参考: