从 Chrome 扩展调用 Google Apps 脚本

Calling Google Apps Script from a Chrome Extension

我知道以前有人在这里问过类似的问题,但我没有找到对我有帮助的答案。对不起!我可能太缺乏经验,无法理解这些答案,所以请多多包涵。

我写了一个 Google Apps 脚本,它扫描特定的电子表格(不是我创作的,但我可以查看)并对某些字段进行计数。 doGet(e) 函数 returns 计数,所以当我 运行 作为网络发布的应用程序时,我看到一个数字。

现在从我的 background.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 参考中,我没有发现任何明显的内容。

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

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

如果您从客户端 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();

};

基本上我只是没有正确解析输出。我收到的输出包含很多东西,我要找的数字隐藏在一堆乱七八糟的字符串中,总是在一些名为 "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];
  }
}

谢谢!