通过Chrome扩展程序调用Google Apps脚本

时间:2015-05-19 19:17:29

标签: google-chrome-extension google-apps-script

我之前在这里问过类似的问题,但我没有找到帮助我的答案。对不起!我可能只是缺乏经验来理解这些答案,所以请耐心等待。

我编写了一个Google Apps脚本,用于扫描特定的电子表格(不是由我创作,但我可以查看)并计算某些字段。 doGet(e)函数返回计数,因此当我运行publish-as-web-app时,我看到一个数字。

现在我的chrome.js在我的chrome扩展程序中做了类似的事情:

var my_app = "https://script.google.com/a/macros/google.com/s/.../exec?param=value";
var xhr = new XMLHttpRequest();
try {
  xhr.open("GET", my_app);
  xhr.send(null);
  var result = xhr.getAllResponseHeaders();
  localStorage.count = result;
  chrome.browserAction.setBadgeText({text: localStorage.count});
} catch(e) 
  ...
}

这非常粗糙,因为我对JavaScript和Chrome扩展程序等都很陌生。

我猜getAllResponseHeaders()不是我在调用my_app时显示的结果数字,所以我应该使用什么呢?在XMLHttpRequest的API参考中,我找不到任何明显的东西。

我很确定我的代码有很多错误,但让我们一步一步。

提前谢谢!详细的答案会很棒,所以我可以关注它们并扩展我目前非常有限的知识。

2 个答案:

答案 0 :(得分:0)

如果您正在从客户端JavaScript到Apps脚本发出HTTP请求,那么您可以使用以下内容:

function requestToAppsScript() {
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else { // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    //console.log('xmlhttp.readyState: ' + xmlhttp.readyState);
    if (xmlhttp.readyState===4 && xmlhttp.status===200) {
      //console.log('xmlhttp.responseText: ' + xmlhttp.responseText);

      var theReturnData = xmlhttp.responseText;
      //console.log('return value: ' + theReturnData);

    };
  };

  xmlhttp.open("GET","URL here",true);
  xmlhttp.send();

};

答案 1 :(得分:0)

基本上我只是没有解析输出。我收到的输出包含了很多东西,而我正在寻找的数字隐藏在一串字符串中,总是在一些名为" cajaHtml"的字符串后面。

因此现在呼叫:

xhr.open("GET", my_app);
xhr.onreadystatechange = handleResponse;
xhr.responseType = "text";
xhr.send(null);

function handleResponse() {
  if (xhr.readyState == 4) {
    var result = xhr.responseText.split("cajaHtml")[1];
  }
}

谢谢!