使用 HTML 服务构建界面与标准 Web 开发类似。不过,某些方面是 Apps 脚本环境特有的。本指南重点介绍了开发响应迅速且安全的 HTML 服务界面的最佳实践。
分离 HTML、CSS 和 JavaScript
将所有 HTML、CSS 和 JavaScript 合并到一个文件中可能会导致项目难以维护。虽然 Apps 脚本要求客户端代码位于 .html 文件中,但您仍应将 CSS 和客户端 JavaScript 分别放在各自的文件中,并使用自定义函数将其包含在主 HTML 页面中。
以下示例在 Code.gs 中使用服务器端 include 函数将 Stylesheet.html 和 JavaScript.html 导入到 Page.html 中。如果使用打印 scriptlet 调用此函数,它会直接注入文件内容。由于这些是 HTML 代码段,而不是独立的 .css 或 .js 文件,因此必须包含 <style> 和 <script> 标记。
Code.gs
function doGet(request) {
return HtmlService.createTemplateFromFile('Page')
.evaluate();
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.getContent();
}Page.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<?!= include('Stylesheet'); ?>
</head>
<body>
<h1>Welcome</h1>
<p>Please enjoy this helpful script.</p>
<?!= include('JavaScript'); ?>
</body>
</html>Stylesheet.html
<style>
p {
color: green;
}
</style>JavaScript.html
<script>
window.addEventListener('load', function() {
console.log('Page is loaded');
});
</script>异步加载数据,而不是在模板中加载
模板化 HTML 可用于快速构建界面,但应限制其使用,以确保界面响应迅速。模板中的代码在网页加载时执行一次,并且在处理完成之前不会向客户端发送任何内容。在 scriptlet 代码中执行长时间运行的任务可能会导致界面显得缓慢。
使用 scriptlet 标记可快速完成一次性任务,例如包含其他内容或设置静态值。所有其他数据都应使用 google.script.run 调用加载。以这种异步方式进行编码难度更大,但可让界面加载速度更快,并有机会向用户显示旋转图标或其他加载消息。
不要 - 加载到模板中
<p>List of things:</p>
<? var things = getLotsOfThings(); ?>
<ul>
<? for (var i = 0; i < things.length; i++) { ?>
<li><?= things[i] ?></li>
<? } ?>
</ul>正确做法 - 异步加载
<p>List of things:</p>
<ul id="things">
<li>Loading...</li>
</ul>
<script
src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script>
// The code in this function runs when the page is loaded.
$(function() {
google.script.run.withSuccessHandler(showThings)
.getLotsOfThings();
});
function showThings(things) {
var list = $('#things');
list.empty();
for (var i = 0; i < things.length; i++) {
list.append('<li>' + things[i] + '</li>');
}
}
</script>使用 HTTPS 加载资源
在 IFRAME sandbox 模式下,所有 JavaScript 和 CSS 文件都必须通过 HTTPS 提供。以不安全的方式提供这些文件会导致出现如下错误:
混合内容:网页“https://...”是通过 HTTPS 加载的,但请求了不安全的脚本“http://...”。此请求已被屏蔽;内容必须通过 HTTPS 提供。
大多数热门库都支持 HTTP 和 HTTPS,因此切换通常只需在网址中插入一个额外的“s”。
使用 HTML5 文档类型声明
如果您的网页是使用较新的 IFRAME
沙盒模式提供的,请务必在 HTML 文件顶部添加以下代码段。
<!DOCTYPE html>
此文档类型声明会告知浏览器,您设计的网页适用于现代浏览器,因此浏览器不应使用Quirks 模式呈现您的网页。即使您不打算利用现代 HTML5 元素或 JavaScript API,此设置也有助于确保网页正确显示。
最后加载 JavaScript
许多 Web 开发者建议在网页底部加载 JavaScript 代码,以提高响应速度,对于 HTML 服务而言,这一点尤为重要。将 <script> 标记移至网页末尾,可让 HTML 内容在 JavaScript 处理之前渲染,从而让您向用户显示旋转图标或其他消息。
利用 jQuery
jQuery 是一种热门的 JavaScript 库,可简化 Web 开发中的许多常见任务。