从 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];
}
}
谢谢!
我知道以前有人在这里问过类似的问题,但我没有找到对我有帮助的答案。对不起!我可能太缺乏经验,无法理解这些答案,所以请多多包涵。
我写了一个 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];
}
}
谢谢!