无需重新加载 Google Apps 脚本网页即可检索 HTML 内容并将其动态注入页面。
设置空元素以接收新的页面内容
<section id="ChgViewSection">
<div id="PageOne"></div>
<div id="PageTwo"></div>
<div id="PageThree"></div>
<div id="PageFour"></div>
<div id="PageFive"></div>
</section>
最初将大多数元素设置为隐藏,style="display:none"
<section id="ChgViewSection">
<div id="PageOne" style="display:block"></div>
<div id="PageTwo" style="display:none"></div>
<div id="PageThree" style="display:none"></div>
<div id="PageFour" style="display:none"></div>
<div id="PageFive" style="display:none"></div>
</div>
</section>
将一个元素设置为style="display:block"
。那将是最初加载的页面。
创建用户界面以更改页面、菜单或选项卡。
<div id="tabs-nested-left">
<div class="cb" id="tabSignIn" onclick="mainStart('SignInBody', 'SignIn')">Sign In</div>
<div class="cb" id="tabInput" onclick="mainStart('InputBlock', 'InputForm')">Input</div>
<div class="cb" id="tabReg" onclick="mainStart('RegisterBlock', 'Register')">Registration</div>
<div class="cb" id="tabRegExpl" onclick="mainStart('Explain', 'Explain')">Registration Explanation</div>
<div class="cb" id="tabContact" onclick="mainStart('ContactUs', 'Contact')">Security</div>
</div>
写一个<script>
用于处理onclick
事件。
<script>
function mainStart(ElmtToGoTo, FileToGet) {
var currntShown = 'SignInBody'; //Create variable and set initial value
//Hide the currently shown element first
document.getElementById(currntShown).style.display = 'none';
//
currntShown = ElmtToGoTo;
//display the element that will be shown. No content is injected yet
document.getElementById(ElmtToGoTo).style.display = 'block';
var el = document.getElementById(ElmtToGoTo);
// If element is empty get HTML and inject
if (el.childNodes.length === 0) {
//alert("it's empty!");
//Run back end google .gs code to get new content
google.script.run.withFailureHandler(onFailure)
.withSuccessHandler(onGotHTML)
.include(FileToGet);
};
};
<script>
向您的 HTML 脚本添加失败和成功处理程序:
function onGotHTML(daHTML) {
//alert("Got HTML File!");
document.getElementById(currntShown).innerHTML=daHTML;
};
function onFailure(error) {
alert("on failure ran:" + error.message);
};
编写服务器端.gs
代码:
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.getContent();
};
单击选项卡时,当前显示的内容<div>
将被隐藏,然后<div>
显示要显示的内容,但尚无内容。如果<div>
已经有内容,什么也不做。如果<div>
为空,则运行 agoogle.script
并从服务器获取内容。内容返回给客户端并注入到<div>
成功处理程序onGotHTML
和document.getElementById(currntShown).innerHTML=daHTML;
其中大部分是 DOM 操作和样式更改。但是使之成为可能的是从服务器检索文件内容。您需要与内容一起保存的文件才能注入<div>
元素。当用户单击菜单项或选项卡时从服务器检索 HTML 内容可以避免预先加载所有内容。一个问题是 CSS 样式数据不能在以后添加,除非它inline
(已经在标签中)。因此,您必须在页面首次加载时加载所有 CSS 样式文件,或者将样式设置放入元素中。您可以在页面加载后注入 HTML,并在不重新加载页面的情况下显示它,但您不能在页面加载后包含 CSS 文件并显示新样式。
我可能遗漏了一些东西,比如用于样式的 CSS 文件,但代码;HTML/样式;并显示总体策略。您可以像这样构建动态单页应用程序。