从ScriptDbConsole.html链接到legend.html时,出现以下错误消息:
抱歉,您请求的文件不存在。请检查地址并再试一次。
这通常可以在正常环境下使用,但我猜这里不是。在script.google.com中。
在script.google.com项目中创建新的.html文件时,它会在与其他文件相同的位置创建该文件,因此此代码实际上应该正确吗?如何从ScriptDbConsole.html中打开legend.html?
<a href='legend.html' target='_blank'>Open in new window</a>
虽然HtmlService允许您提供HTML,但它不是“托管”页面,并且您不能直接通过URL访问Apps脚本项目中的各种html文件。而是,您的Web应用程序在发布时将具有URL,这是您唯一的URL。
您可以通过这种方式为脚本提供单独的页面,并使它们的行为类似于html文件链接。
该doGet()函数在调用时会传递一个事件,我们可以利用该事件来指示我们要服务的页面。如果我们的Web应用程序ID为<SCRIPTURL>,则URL以及请求特定页面的查询字符串将如下所示:
doGet()
<SCRIPTURL>
https://script.google.com/macros/s/<SCRIPTURL>/dev?page=my1
使用模板化的HTML,我们可以动态生成必要的URL + querystring。在我们的中doGet(),我们只需要解析querystring即可确定要投放的页面。
这是脚本,其中有两个示例页面,其中包含在它们之间切换的按钮。
/** * 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(); }
<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>
<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>