"如何在javascript中获取Google Apps script脚本Web应用程序沙箱的url查询字符串参数?



我有一个webapp,它有多个页面作为沙盒中的模板。我想在我的网络应用程序中的页面之间传递一个ID作为url参数。

问题1:我不知道如何从我的javascript页面文件中访问url参数,因为当使用window.location时,我没有得到地址栏中显示的相同url。

有没有一种方法可以直接从javascript获取参数,或者我必须让服务器将其发送到javascript?

如果我需要从服务器上获取它,我担心由于网络应用程序意味着有多个用户在网络应用程序的不同页面上,服务器如何知道要发送哪个url?

对不起,如果我说的没有道理!我在下面包含了一些代码,试图帮助解释这个问题。。。

Code.gs代码:

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"

}

答案:

您将需要评估参数服务器端以确定要加载的页面。页面的链接应该相应地写在HTML中

更多信息:

脚本URL和加载内容的页面的来源不相同。因此,您不能使用window.location来获取脚本URL,因为您将收到googleusercontent.com地址,而不是script.google.com地址。

解决方案:

第一种方法是简单地将HTML修改为URL中的硬代码。您的doGet()函数将类似于:

function doGet(e) {
if (!e.parameter.v || e.parameter.v == "home") {
return HtmlService.createTemplateFromFile("home").evaluate();
}  
else if (e.parameter.v == "form") {
return loadForm();
}  
else if (e.parameter.v == "class") {
return loadClassView();
}
}
function loadForm() {
// do some template processing here
return HtmlService.createTemplateFromFile('form').evaluate();
}
function loadClassView() {
// do some template processing here
return HtmlService.createTemplateFromFile('class').evaluate();
}

然后在HTML中,你可以在链接中硬编码:

<a href='https://script.google.com/a/domain.com/macros/s/script-id/exec?v=class'>Click here to go to 'Class'.</a>

或者,当为相应页面调用doGet()函数时,您可以使用当前模板并插入脚本url:

function doGet(e) {
if (!e.parameter.v || e.parameter.v == "home") {
return HtmlService.createTemplateFromFile("home").evaluate();
}  
// etc...
}
function getScriptUrl() {
var url = ScriptApp.getService().getUrl();
return url;
}

并将其插入html文件中需要的位置:

<? var url = getScriptUrl(); ?>
<!-- more stuff -->
<a href="<?!= url ?>?v=class">Click here to go to 'Class'</a>

这里的scriptlet将调用服务器端代码中定义的getScriptUrl()函数,该函数返回web应用程序url,然后将其附加到anchor元素中参数的开头。

参考文献:

  • HTML服务:模板HTML |应用程序脚本|谷歌开发者

最新更新