在 Google Apps 脚本中链接到另一个 HTML 页面 [英] Linking to another HTML page in Google Apps Script

查看:20
本文介绍了在 Google Apps 脚本中链接到另一个 HTML 页面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从 ScriptDbConsole.html 链接到 legend.html 时,我收到以下错误消息:

When linking from ScriptDbConsole.html to legend.html I get the following error message:

抱歉,您请求的文件不存在.请检查地址并重试.

Sorry, the file you have requested does not exist. Please check the address and try again.

这通常可以在正常环境中工作,但我猜在这里不行.它在 script.google.com 中.

This would normally work in a normal environment, but not here I guess. It's in script.google.com.

在 script.google.com 项目中创建新的 .html 文件时,它会在与其他文件相同的位置创建它,所以这段代码实际上应该可以正常工作吗?如何从 ScriptDbConsole.html 打开legend.html?

When creating a new .html file in script.google.com project, it creates it at the same location as it did for the others, so this code should actually work right? How can I open legend.html from ScriptDbConsole.html?

<a href='legend.html' target='_blank'>Open in new window</a>

推荐答案

虽然 HtmlService 允许您提供 HTML,但它不是托管"页面,您无法直接通过 URL 访问 Apps Script 项目中的各种 html 文件.相反,您的 Web 应用程序在发布时会有一个 URL,这是您拥有的唯一 URL.

While the HtmlService allows you to serve HTML, it is not "hosting" pages, and you cannot access the various html files in your Apps Script project by URL directly. Instead, your Web App will have a URL when it is published, and that is the only URL you have.

这里有一种方法可以让您从脚本中提供单独的页面,并使它们的行为类似于 html 文件链接.

Here's a way that you can serve separate pages from your script, and have them behave similarly to html file links.

doGet() 函数在调用时会传递一个事件,我们可以利用它来指示我们想要提供哪个页面.如果我们的 Web App ID 是 ,那么 URL 加上请求特定页面的查询字符串将如下所示:

The doGet() function is passed an event when called, and we can take advantage of that to indicate which page we want served. If our Web App ID is <SCRIPTURL>, here is what a URL plus a querystring requesting a specific page will look like:

https://script.google.com/macros/s/<SCRIPTURL>/dev?page=my1

使用模板化的 HTML,我们可以即时生成必要的 URL + 查询字符串.在我们的 doGet() 中,我们只需要解析查询字符串以确定要提供的页面.

Using templated HTML, we can generate the necessary URL + querystring on the fly. In our doGet(), we just need to parse the querystring to determine which page to serve.

这是脚本,包含两个示例页面,其中包含可在它们之间切换的按钮.

Here's the script, with two sample pages containing buttons to flip between them.

/**
 * Get the URL for the Google Apps Script running as a WebApp.
 */
function getScriptUrl() {
 var url = ScriptApp.getService().getUrl();
 return url;
}

/**
 * Get "home page", or a requested page.
 * Expects a 'page' parameter in querystring.
 *
 * @param {event} e Event passed to doGet, with querystring
 * @returns {String/html} Html to be served
 */
function doGet(e) {
  Logger.log( Utilities.jsonStringify(e) );
  if (!e.parameter.page) {
    // When no specific page requested, return "home page"
    return HtmlService.createTemplateFromFile('my1').evaluate();
  }
  // else, use page parameter to pick an html file from the script
  return HtmlService.createTemplateFromFile(e.parameter['page']).evaluate();
}

my1.html

<html>
  <body>
    <h1>Source = my1.html</h1>
    <?var url = getScriptUrl();?><a href='<?=url?>?page=my2'> <input type='button' name='button' value='my2.html'></a>
  </body>
</html>

my2.html

<html>
  <body>
    <h1>Source = my2.html</h1>
    <?var url = getScriptUrl();?><a href='<?=url?>?page=my1'> <input type='button' name='button' value='my1.html'></a>
  </body>
</html>

这篇关于在 Google Apps 脚本中链接到另一个 HTML 页面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆