我正在尝试获取Chrome中标签的当前网址,然后向网站发起请求并获取内容并将其写入文档正文。这是我的chrome ext。 JS:
var engine = {
run: function () {
chrome.tabs.query({
'active': true,
'windowId': chrome.windows.WINDOW_ID_CURRENT
}, function (tabs) {
var url = tabs[0].url;
var urlfinal = 'http://SOMESITEHERE.com/api.php?url=' + url;
var response = this.connect(urlfinal);
document.write(response);
});
},
//console.log(this.url),
connect: function (link) {
var xmlHttp = null;
xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", link, false);
xmlHttp.send(null);
return xmlHttp.responseText;
}
};
document.addEventListener('DOMContentLoaded', function () {
engine.run();
});
但是抛出:对tab.query的响应出错:TypeError:undefined不是函数... bla bla
我做错了什么?什么是最好的方法?
编辑:
这是我的Manifest.json:
{
"manifest_version": 2,
"name": "SOMETHINGHERE",
"description": "SOMETHINGHERE",
"version": "1.0",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"http://SITEHERE.com/",
"tabs"
]
}
答案 0 :(得分:1)
“TypeError:undefined不是函数”意味着您正在尝试调用值为undefined
的内容,就像它是函数一样。
在您的情况下,您致电this.connect(urlfinal)
,但this
不是您所期望的(不是engine
)。
您在回调中,而不再是run
函数,this
没有属性connect
。因此,this.connect == undefined
。在这些情况下,调用this.connect()
会抛出该错误。
要解决此问题,您可以,例如,存储顶级this
对象,然后让闭包处理剩下的事情:
run: function () {
var _this = this;
chrome.tabs.query({
'active': true,
'windowId': chrome.windows.WINDOW_ID_CURRENT
}, function (tabs) {
var url = tabs[0].url;
var urlfinal = 'http://SOMESITEHERE.com/api.php?url=' + url;
var response = _this.connect(urlfinal);
document.write(response);
});
}
查看有关此技术的更多信息here。