在GAS嵌入式环境中通过Javascript刷新HTML文档

在GAS嵌入式环境中通过Javascript刷新HTML文档,javascript,jquery,google-apps-script,reload,document-body,Javascript,Jquery,Google Apps Script,Reload,Document Body,因此,我在Google Appscript中创建了一个简单的计时应用程序,将数据存储在电子表格中,并在内部Google站点上的嵌入式Javascript/JQuery小程序中显示信息。看起来是这样的: 我的问题是,有些用户将浏览器页面打开的时间过长,必须单击对象两次才能注销或登录,或刷新页面。我希望设置一个时间间隔计时器来为他们刷新以节省一个步骤。下面是我在前端处理间隔刷新并在设置的空闲时间后重新创建正文HTML的代码: //当页面加载时。 函数start(){ 请尝试{var dateS

因此,我在Google Appscript中创建了一个简单的计时应用程序,将数据存储在电子表格中,并在内部Google站点上的嵌入式Javascript/JQuery小程序中显示信息。看起来是这样的:

我的问题是,有些用户将浏览器页面打开的时间过长,必须单击对象两次才能注销或登录,或刷新页面。我希望设置一个时间间隔计时器来为他们刷新以节省一个步骤。下面是我在前端处理间隔刷新并在设置的空闲时间后重新创建正文HTML的代码:


//当页面加载时。
函数start(){
请尝试{var dateString=moment(new Date()).format('L');}
catch(e){var dateString=getNowDateString();}
document.getElementById(“title”).style.display=“无”;
document.getElementById(“时钟”).style.display=“无”;
document.getElementById(“加载器”).style.display=“块”;
document.getElementById(“接口”).style.display=“无”;
google.script.run.withSuccessHandler(showTimeTrack).pullCard(JSON.stringify({email:DATA.email,date:dateString,source:'TimeTrack');
}
功能showTimeTrack(有效负载){
控制台日志(有效载荷);
var body=$('body').clone();
var time=new Date().getTime();
var data=JSON.parse(有效负载);
var greenflag=(data.greenflag)?真:假;
var interface=document.getElementById('interface');
var emailDiv=document.createElement('small');
emailDiv.appendChild(document.createTextNode('连接为:');
emailDiv.appendChild(document.createElement('br'));
emailDiv.appendChild(document.createTextNode(DATA.email));
emailDiv.appendChild(document.createElement('br'));
emailDiv.appendChild(document.createElement('br'));
接口.appendChild(emailDiv);
var lastLogDiv=document.createElement('small');
lastLogDiv.innerHTML=''+data.timecard.info.message+'';
lastLogDiv.appendChild(document.createElement('br'));
如果(data.timecard.info.lastRole.length>0)
{
appendChild(document.createTextNode('As:'+data.timecard.info.lastRole));
}
接口.appendChild(lastLogDiv);
//…正在创建各种HTML元素。。。
接口.appendChild(logBtn);
appendChild(document.createElement('br'));
appendChild(document.createElement('br'));
var cardButton=document.createElement('button');
cardButton.innerHTML='查看时间卡';
控制台日志(数据);
cardButton.onclick=function(){openWindowWithPost(JSON.stringify({timecard:data.timecard,directory:data.directory}));}
接口.appendChild(cardButton);
appendChild(document.createElement('br'));
appendChild(document.createElement('br'));
设置时钟();
document.getElementById(“加载器”).style.display=“无”;
document.getElementById(“title”).style.display=“block”;
document.getElementById(“时钟”).style.display=“块”;
document.getElementById(“接口”).style.display=“块”;
var refreshIntervalId=setInterval(函数(){
$(document.body).bind(“mousemove按键”,函数(e){
time=newdate().getTime();console.log(time);});
log('当前运行在'+时刻(time.)。格式('MMMM-Do-YYYY,h:mm:ss-a');
如果(新日期().getTime()-time>=10000)
{
var body=$('body').clone();document.body.innerHTML='';$('body').html(body);start();var body=$('body').clone();
时间=新日期().getTime();
log('new Date()).format('MMMM Do YYYY,h:mm:ss a');
clearInterval(refreshIntervalId);
}
否则{
log('checked at'+time(new Date()).format('MMMM Do YYYY,h:mm:ss a');
}}, 3000);
}
//////////////////////////////////////////////////////功能设置时钟////////////////////////////////////////////////////////////////////////////////////
函数setClock()
{
var now=moment(new Date()).tz(DATA.timeZone).format('hh:mm:ss A z');
$('#time').html(现在);
setTimeout('setClock()',500);
}

var数据=;
时间轨迹

当前时间:
jquery
clone()
方法生成所选元素的副本。最终得到的是
body
标记位于其他body标记的内部,每个标记嵌套在另一个标记的内部

目前 尝试
谢谢你的回复,桑迪。我想也有一些筑巢行为。不幸的是,我复制了你的代码行,它也做了同样的事情。我想知道,在谷歌应用程序脚本环境中,脚本的嵌入性质是否意味着body标签永远不能为空?我希望不是。我将尝试单独重置每个元素,而不是尝试在一行中克隆整个元素。作为一个应用程序脚本Web应用程序应该不会有任何区别。您应该使用
console.log('body:'+body)
I对答案进行了更改。问题已解决。我最终用这段代码来处理单个元素,而不是试图克隆主体。document.getElementById('time')。innerHTML='';document.getElementById('interface')。innerHTML='';document.getElementById('modalContent')。innerHTML='';document.getElementById('closeModal')。innerHTML='';start();谢谢桑迪为我指明了正确的方向!
var body = $('body').clone();
document.body.innerHTML = ''; 
$('body').html(body); 
start(); 
var body = $('body').clone();
var body = document.body.innerHTML;//Get the HTML inside of the `body` tag
document.body.innerHTML = '';//Clear the existing HTML from the `body` tag

console.log('body: ' + body);

document.body.innerHTML = body;

start();