链接到Google Apps脚本中的另一个HTML页面
从ScriptDbConsole.html链接到legend.html时,我得到以下错误信息:
对不起,您请求的文件不存在。 请检查地址,然后重试。
这通常会在正常的环境中工作,但不是我想的。 这是在script.google.com。
在script.google.com项目中创build一个新的.html文件时,它会在其他位置创build相同的位置,所以这段代码实际上应该是正确的? 如何从ScriptDbConsole.html打开legend.html?
<a href='legend.html' target='_blank'>Open in new window</a>
虽然HtmlService允许您提供HTML,但不是“托pipe”页面,而且您无法直接通过URL访问Apps脚本项目中的各种html文件。 相反,您的Web应用程序在发布时会有一个URL,而且这是唯一的URL。
这是一种可以从脚本中提供单独页面的方法,并使它们的行为与html文件链接类似。
doGet()
函数在被调用时传递一个事件,我们可以利用它来指示我们想要提供哪个页面。 如果我们的Web App ID是<SCRIPTURL>
,那么请求一个特定页面的URL和查询string如下所示:
https://script.google.com/macros/s/<SCRIPTURL>/dev?page=my1
使用模板化的HTML,我们可以即时生成必要的URL +查询string。 在我们的doGet()
,我们只需要parsing查询string来确定要提供哪个页面。
这是脚本,两个包含button的示例页面在它们之间翻转。
Code.gs
/** * 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>