Google Apps脚本location.reload在网络应用中

per*_*ual 6 html javascript reload window.location google-apps-script

我使用的是GAS网络应用,当用户执行某些操作(例如点击特定的div)时,该应用需要刷新其内容。

在客户端,我有一个从onclick调用的脚本

google.script.run.withSuccessHandler(refreshCallback).myServersideFunction();

function refreshCallback(roomsPlus) {
    var statusDiv = document.getElementById("status");
    statusDiv.innerHTML = "Reloading...";
    window.location.reload(true);
};
Run Code Online (Sandbox Code Playgroud)

状态div更改为“正在重新加载...”,因此我知道回调已被调用,但随后它从未重新加载页面。Caja或google apps脚本会禁用页面刷新吗?还有另一种刷新页面的方法吗?

Ala*_*lls 7

您需要做的就是使用:

window.open("https://script.google.com/macros/s/web_app_ID/dev",'_top');
Run Code Online (Sandbox Code Playgroud)

我在下面的原始答案有效,但不需要:

有一个程序化的“解决方法”来重新加载/刷新 Apps 脚本 Web 应用程序中的页面。它基于 html 链接标签重新加载页面的能力,以及 JavaScript 调用该标签上的点击事件的能力。如果需要,您可以隐藏链接。

  • 将链接标签添加到您的 HTML
  • 如果您愿意,可以隐藏链接标签
  • 在脚本标签中添加客户端代码以调用链接标签上的点击事件
  • 随心所欲地运行代码

测试按钮:

<button onmouseup="reloadTheWebApp()">Trigger the Link Tag</button>
Run Code Online (Sandbox Code Playgroud)

关联:

<a id="testLink" style="display:none" 
   href="https://script.google.com/macros/s/script_ID/exec">Reload the Web App</a>
Run Code Online (Sandbox Code Playgroud)

脚本:

<script>

  window.reloadTheWebApp = function() {
    console.log('reloadTheWebApp ran');

    var linkTag = document.getElementById('testLink');

    linkTag.click();
  }

</script>
Run Code Online (Sandbox Code Playgroud)

实现一个简单的页面导航系统可能更可取:

页面导航 Web 应用程序 - 应用程序脚本


Eri*_*eda 4

编辑

Caja 已于 2016 年 7 月 16 日从 Web App HtmlService 中删除。

原生沙盒模式

HTML 服务的更新

编辑结束

不幸的是,HtmlService 使用的 Caja 清理引擎限制了对窗口对象的访问,从而阻止您以编程方式重新加载页面。这是该服务的已知限制,我们正在努力更好地记录它。