&引用;如何在javascript中获取google应用程序脚本web应用程序沙箱的url查询字符串参数?
我有一个webapp,在一个沙箱中有多个页面作为模板。我想在我的webapp中的页面之间传递一个ID作为url参数 问题1:我不知道如何从我的javascript页面文件中访问url参数,就像使用window.location时一样。我没有得到地址栏中显示的相同url 是否有一种直接从javascript获取参数的方法,还是必须让服务器将其发送到javascript 如果我需要从服务器上获取它,我担心由于webapp意味着有多个用户在webapp的不同页面上,服务器如何知道要发送哪个url 对不起,如果我说的没有道理!我在下面包含一些代码,试图帮助解释这个问题 代码.gs代码:&引用;如何在javascript中获取google应用程序脚本web应用程序沙箱的url查询字符串参数?,javascript,google-apps-script,Javascript,Google Apps Script,我有一个webapp,在一个沙箱中有多个页面作为模板。我想在我的webapp中的页面之间传递一个ID作为url参数 问题1:我不知道如何从我的javascript页面文件中访问url参数,就像使用window.location时一样。我没有得到地址栏中显示的相同url 是否有一种直接从javascript获取参数的方法,还是必须让服务器将其发送到javascript 如果我需要从服务器上获取它,我担心由于webapp意味着有多个用户在webapp的不同页面上,服务器如何知道要发送哪个url 对不
function doGet(e){
var param1 = e.parameters.v;
var param2 = e.parameters.id;
if(param1 == "form"){
return loadForm();
} else if(e.parameters.v == "class") {
return loadClassView();
} else {
var tmp = HtmlService.createTemplateFromFile("home");
tmp.baseUrlToSend = baseURL;
return tmp.evaluate();
}
}
javascript:
function OnLoad(){
var thisURL = window.location;
alert(thisURL);
//I hoped this would alert something along the lines of "https://script.google.com/a/macros/s/-MY-WEB-APP-ID-/dev?v=class&id=0d2f35e9-d785-4fab-a8ee-fe8933f1c159"
//But what this actually alerts is "https://n-g5aftzut - REMOVED FOR SECURITY -mmajfkwvesq-0lu-script.googleusercontent.com/userCodeAppPanel"
}
提前谢谢 答复:
您需要评估参数server-side以确定要加载的页面。页面的链接应该相应地用HTML编写
更多信息:
脚本URL和加载内容的页面的来源不同。因此,您不能使用window.location
获取脚本URL,因为您将收到googleusercontent.com
地址,而不是script.google.com
地址
解决:
第一种方法是简单地将HTML修改为URL中的硬代码。您的doGet()
函数将类似于:
函数doGet(e){
如果(!e.parameter.v | | e.parameter.v==“home”){
返回HtmlService.createTemplateFromFile(“home”).evaluate();
}
else if(e.parameter.v==“form”){
返回loadForm();
}
else if(e.parameter.v==“类”){
返回loadClassView();
}
}
函数loadForm(){
//在这里做一些模板处理
返回HtmlService.createTemplateFromFile('form').evaluate();
}
函数loadClassView(){
//在这里做一些模板处理
返回HtmlService.createTemplateFromFile('class').evaluate();
}
然后在HTML中,您可以在链接中硬编码:
或者,当为相应页面调用doGet()
函数时,您可以使用当前模板并插入脚本url:
函数doGet(e){
如果(!e.parameter.v | | e.parameter.v==“home”){
返回HtmlService.createTemplateFromFile(“home”).evaluate();
}
//等等。。。
}
函数getScriptUrl(){
var url=ScriptApp.getService().getUrl();
返回url;
}
并将其插入html文件中需要的位置:
这里的scriptlet将调用服务器端代码中定义的getScriptUrl()
函数,该函数返回web应用程序url,然后将其附加到锚元素中参数的开头
我希望这对你有帮助
参考资料:
window.top.location.href
是因为受到的限制,在这里你可以编写top
href,但不能阅读它。@Rafa Guillermo谢谢你!我必须将ID作为第二个参数添加到url中,这是通过搜索电子表格(充当db)获得的。因此,我认为我无法在HTML中硬编写url。如果我从服务器获取url,多个用户是否会导致这种情况出现问题?我能够创建url没有问题,但我不知道如何通过server@JohnKane您可以用同样的方法获取ID。在code.gs
文件中定义一个getId()
函数,并让它返回id。然后,您可以在html中调用
,并以相同的方式附加它:
@JohnKane多个用户不会导致问题,而是会话的不同调用。如果它依赖于用户,则根据组织的设置,您可以作为“访问web应用的用户”运行web应用,并相应地处理该信息。相关: