Javascript Google脚本HtmlService,通过多个选项卡复制URL变量
我创建了一个web应用程序,可以接受URL字符串中的变量,但是当我打开多个选项卡时,Javascript Google脚本HtmlService,通过多个选项卡复制URL变量,javascript,google-apps-script,Javascript,Google Apps Script,我创建了一个web应用程序,可以接受URL字符串中的变量,但是当我打开多个选项卡时,cID的值不同,最后打开的选项卡会反映所有选项卡。这是一个奇怪的现象,我希望有人能帮助我解决它为什么会发生,并可能提出一个解决方案来避免它 HTML页面的服务器端创建: function doGet(e) { var id = e.parameter.cID PropertiesService.getScriptProperties().setProperty('id',id); ret
cID
的值不同,最后打开的选项卡会反映所有选项卡。这是一个奇怪的现象,我希望有人能帮助我解决它为什么会发生,并可能提出一个解决方案来避免它
HTML页面的服务器端创建:
function doGet(e) {
var id = e.parameter.cID
PropertiesService.getScriptProperties().setProperty('id',id);
return HtmlService
.createTemplateFromFile('Index')
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
页面加载后调用的函数:
function idLock() {
google.script.run.withSuccessHandler(getID).returnID();
}
基于传入的cID
获取信息的服务器端函数:
function returnID(){
return PropertiesService.getScriptProperties().getProperty('id');
}
我的最佳猜测是,
id
变量与基于实例的变量相比,具有一定的全局性。如果是这种情况,我如何防止这种情况发生?我如何能够传递此信息,是通过生成一个变量,该变量对于页面实例而言是全局的,但在PropertyServices
的意义上不是全局的
var myPar;
function doGet(e) {
myPar = e.parameter.cID
return HtmlService
.createTemplateFromFile('Index')
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
通过添加
这可能不是最好的方法,但它确实返回了我所希望的结果。当您声明“选项卡”时,您指的是浏览器选项卡。而不是HTML中的选项卡。因此,您在一个选项卡中打开一个Web应用程序,然后在另一个选项卡中以不同的“id”打开一个Web应用程序,然后第一个浏览器选项卡中的Web应用程序会自动更新为最后一个“id”?对不起,是的,我指的是浏览器选项卡。例如,如果我在第一页完全加载之前打开example.com?cID=1234和example.com?cID=5678,这两个页面都将显示5678。如果有意义的话。第二个值将在第一个浏览器选项卡中检索第一个值之前写入属性服务。您应该做的第一件事是使用锁服务,看看这是否解决了问题。如果
doGet()
函数没有调用任何其他函数,则锁定服务“应该”修复您的问题。如果锁服务不能解决这个问题,那么它会变得更复杂。如果您想要持久存储,除了将数据写入某个文件之外,属性服务是唯一的选择。缓存服务可用于存储在给定时间后自行删除的值。默认值大约是10分钟?如果您不需要将值存储超过几分钟,缓存服务可能是一个选项,它可能比属性服务更快。在这种情况下,我将使用缓存服务和脚本锁。这太棒了!我喜欢。谢谢你桑迪,谢谢你帮我弄明白!这将是非常有用的。