在链接到谷歌应用脚​​本中的另一个html页面时传递参数

时间:2016-02-11 02:02:29

标签: javascript google-apps-script parameter-passing

首先,这是一个google-app-script问题...我似乎无法在HTML中捕获 第二个(或后续的) 参数页面(即"项目"在此示例中)...我已经看过许多使用" location.search"和" window.location.search",但这些似乎都不起作用。它可能就像" location.search"是不是正确的用法?

实施例

Code.gs

var myParam;
/**
 * Get the URL for the Google Apps Script running as a WebApp.
 */

function getScriptUrl() {
 var url = ScriptApp.getService().getUrl();
 return url;
}
/**
 * Get "home page", or a requested page.
 * Expects a 'page' parameter in querystring.
 *
 * @param {event} e Event passed to doGet, with querystring
 * @returns {String/html} Html to be served
 */
function doGet(e) {
  //Logger.log( Utilities.jsonStringify(e) );
  Logger.log(e.parameter.page);
  var pgToLoad = e.parameter.page;

  if (!e.parameter.page) {
    Logger.log('!e.parameter.page')
    // When no specific page requested, return "home page"
    // return HtmlService.createTemplateFromFile('my1').evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
    return HtmlService.createTemplateFromFile('my1').evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
  }
  Logger.log('there is something for the page');
  // else, use page parameter to pick an html file from the script
  // return HtmlService.createTemplateFromFile(pgToLoad).evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
  return HtmlService.createTemplateFromFile(pgToLoad).evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

我有多个HTML文件,但它们与下面的my1.html基本相同... my1.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <h1>Source = my1.html</h1>
    <p id=myParam>Placeholder</p>
    <?var url = getScriptUrl();?><a href='<?=url?>?page=my2&item=1-234'> <input type='button' name='button' value='my2.html'></a>
    <?var url = getScriptUrl();?><a href='<?=url?>?page=my3&item=1-345'> <input type='button' name='button' value='my3.html'></a>
  </body>
</html>
<script>
function getParam(sname)
{
  var params = location.search;
  var sval = "";
  params = params.split("&");
  // split param and value into individual pieces
  for (var i=0; i<params.length; i++)
  {
    temp = params[i].split("=");
    if ( temp[0] == sname ) { sval = temp[1]; }
  }
  return sval;
}
function changeItem() {
  var param = getParam("item");
  var myItem = "Item:-"+param+"-";
  document.getElementById("myParam").innerHTML = myItem;
}
window.onload = changeItem;
</script>

2 个答案:

答案 0 :(得分:1)

我想我知道你想做什么。看起来您正在从服务器端的doGet(e)函数获取搜索字符串参数,然后您尝试在&#34;客户端&#34;上再次获取相同的搜索字符串参数。从onload函数?如果是这种情况,我会放弃尝试从客户端获取搜索字符串参数。

您可以将搜索字符串参数存储在浏览器sessionStorage中:

window.sessionStorage.setItem("searchStringOne","Value One");

并检索:

var valueOne = window.sessionStorage.getItem("searchStringOne");

Session Storage Information

答案 1 :(得分:0)

以下是一个示例,说明如何使用app脚本的html-service获取查询字符串参数以提供不同的html模板:

function doGet(e) {
   Logger.log( Utilities.jsonStringify(e) );

  // Load a home page when no parameter is specified

  if (!e.parameter.redirect) {
  var template = HtmlService.createTemplateFromFile('home');

  var htmlOutput =    template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setTitle('Home');
  return htmlOutput;
  }

  //get the page from parameter and load it  

 else{
 var template=HtmlService.createTemplateFromFile(e.parameter['redirect']);

 var htmlOutput = template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setTitle('Other Page');

 return htmlOutput;
 }

}

function getScriptUrl() {

  var url = ScriptApp.getService().getUrl();

  return url;
}

然后HTML将如下所示:

home.html的

        <?var url = getScriptUrl();?>

        You are on Home Page.

        <a href='<?=url?>?redirect=pagex'>Goto PageX</a>



        <a href='<?=url?>?redirect=pagey'>Goto PageY</a>

pagex.html

You are on PageX

pagey.html

You are on PageY 

希望这有帮助!