javascript - 使用 javascript 时 Google Web App 未打开 http 链接

标签 javascript google-apps-script

可能有比我下面提出的解决方案更好的解决方案,但它解决了我尝试将变量从 Google Apps 脚本传递到 Google Web App 中的 JavaScript 的最初问题。网页中的 scriptlet 会进行大量脚本调用,并且由于它是同步执行的,因此页面看起来有 15 秒没有加载。 JavaScript 解决了这个问题。

function doGet(e) {
  //check to see what the user is hoping to do
  var upTo = e.parameter.upTo;
  var userAgentResponse = HtmlService.getUserAgent();
  //check where we are up to, URL will need ?upTo=profile added to it.
  if (upTo == "profile"){
    //get name from URL will need ?upTo=profile&firstName=placeholder&surname=placeholder
    var firstName = e.parameter.firstName;
    var surname = e.parameter.surname;
    var fullName = firstName + " " + surname;
    if (userAgentResponse.indexOf("iPhone")>-1) { //check to see if it is an iPhone and then use the specific iPhone profile page becaause of viewport issues
      //var t = HtmlService.createTemplateFromFile('iphoneProfilePage');
      var code = HtmlService.createHtmlOutputFromFile('iphoneProfilePage').getContent();
    }//end if Iphone
    else {
      //var t = HtmlService.createTemplateFromFile('profilePage');
      var code = HtmlService.createHtmlOutputFromFile('profilePage').getContent();
    }//end else
    //t.data = [firstName, surname, userAgentResponse]; 
    //return t.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setTitle("Response Services Inc.").addMetaTag('viewport', 'width=device-width, initial-scale=1.0');
    var newCode = code.replace("<script id=\"firstLoad\">", "<script id=\"firstLoad\">\n var firstName = \"" + firstName + "\";\n var surname = \"" + surname + "\";\n" +
                        "var fullName = \"" + fullName + "\";\n");
    var html = HtmlService.createHtmlOutput(newCode).asTemplate();
    return html.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setTitle("Response Services Inc.").addMetaTag('viewport', 'width=device-width, initial-scale=1');
  }
}

我遇到的下一个障碍让我和其他与我交谈过的人感到困惑。在下面的 HTML 中,有几个 http 链接和一些 https 链接。当使用上面的 doGet() 时,http 链接似乎违反了 https 协议(protocol),并且不会打开新页面,但是当我使用注释掉的代码(即 createTemplateFromFile(),而不是 createHtmlOutput())时。 asTemplate()) http 链接工作正常。另外,如果我在新窗口中打开链接,则页面可以正常打开。新窗口并不是一个好的解决方案,因为用户需要前后导航。

 <nav>
  <label for="drop" class="toggle">Menu</label>
  <input type="checkbox" id="drop" />
  <ul class="menu">
    <li><a href="http://rsi-intranet.org" target="_blank">Home</a></li>
    <li><a href="https://script.google.com/a/macros/responseservices.org/s/AKfycbyz6TzObVUrWo0fiXHH0vU9DNO3511w1tVWrdVEUVsrjo_ejVHS/exec?upTo=SUList&letter=0">Service Users</a></li>
    <li><a href="https://script.google.com/a/macros/responseservices.org/s/AKfycbyyVpvvDivBcwktFmHw-DrxWOTKUT17Ir2jdG2Oi4c/exec?upTo=progDays">Activities & Supports</a></li>
    <li><a href="http://www.rsi-intranet.org/policies-and-procedures" target="_blank">Policies and Procedures</a></li>
    <li><a href="http://www.rsi-intranet.org/quick-forms" target="_blank">Quick Forms</a></li>
    <li><a href="http://www.rsi-intranet.org/help-and-learning" target="_blank">Help & Learning</a></li>
  </ul>
</nav>

我已搜索过与此相关的 Google Apps 文档,但尚未找到原因。很想知道答案。

最佳答案

您应该将 target="_blank"与超链接一起使用,因为网络应用程序在 IFRAME 内提供。某些网站可能会通过将 X-Frame-Options header 设置为 DENY 来拒绝 IFRAME 内的链接。

关于javascript - 使用 javascript 时 Google Web App 未打开 http 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39381168/

相关文章:

javascript - 如何将多项选择 div 中的问题分开?

javascript - 如果搜索时没有结果,讲述人应读取 "no search results"

javascript - 在 ES6 之前的代码中使用 "let"和 "const"可以吗?

javascript - Angular Material 网格列表: repeat a set of grid-list-tiles

javascript - 使用 jquery 更改表单输入字段的值

javascript - Date.parse 在 Apps 脚本中返回 NaN

google-apps-script - Google Sheet 标签更改通知

javascript - 使用持久的工具构建 Web 应用程序

google-apps-script - 日历同步 - 安装 onEventUpdated 触发器

javascript - 删除谷歌电子表格中的所有空行