Java-script,谷歌chrome扩展:未定义的类变量,在方法中引用的回调
Java-script, Google chrome extension: Undefined class variable, in method referenced by callback
我正在尝试使谷歌Chrome扩展。
一开始,我想创建一个javascript类,它代表活动的浏览器选项卡,让我使用那个HTML源。应该这样使用:
var currentTab = new CurrentTab();
currentTab.requestHtml(function(html){
// `html` contents active tab HTML
});
我谷歌了一下,我发现活动选项卡的HTML不能直接得到扩展的弹出。但我可以通过我自己的javascript标签,通过chrome.extension.sendRequest()
响应他的HTML到我的扩展。所以,我的CurrentTab
类是这样的:
var CurrentTab = function(){
this.listeners = {
'requestHtml': {}
};
chrome.extension.onRequest.addListener(this._processListener);
};
CurrentTab.prototype = {
requestHtml: function(callback){
var actionKey = Math.ceil(Math.random() * 10000); // get random identifier for this callback
this.listeners['requestHtml'][actionKey] = callback;
chrome.tabs.executeScript(null, {
code: 'console.log("SendContent.js");'
+ 'chrome.extension.sendRequest({'
+ ' action: "' + actionKey + '",'
+ ' host: document.location.hostname,'
+ ' content: document.getElementsByTagName("html")[0].outerHTML'
+ '}, function(response){});'
});
},
_processListener: function(request, sender, sendResponse){
/*25.*/console.log(this.listeners); // `this.listeners` is 'undefined' ???
if (this.listeners['requestHtml'][request.action]) {
this.listeners['requestHtml'][request.action](request.content);
delete this.listeners['requestHtml'][request.action];
}
}
};
问题在该类的第25行。虽然_processListener
方法是CurrentTab
类的一部分,但当通过回调调用该方法时,变量this.listeners
在这里是未定义的。
请问,我怎么能解决这个问题,为什么会发生?谢谢。
使用Function.prototype.bind
:
var CurrentTab = function(){
...
chrome.extension.onRequest.addListener(this._processListener.bind(this));
};
相关文章:
- 引用类变量中的原型方法
- 有没有一种方法可以通过只引用JavaScript来执行代码
- 可以“;超级“;可以在子类的方法内部使用,在不直接引用的情况下调用相应的超类方法
- 通过引用Javascript中的另一个函数来传递对象方法
- 这在 Object 方法中不引用对象,而是引用函数绑定到的标记
- 在方法中失去对对象的引用
- 使用clearInterval方法实现的是将区间变量引用设置为null,而不是
- 有没有一种方法可以捕获JavaScript控制台输出,以便我可以在其他地方引用它
- 有没有一种方法可以重新绑定jQuery插件中引用的事件处理程序
- 在JQuery中,'加载'方法'的相对路径在引用项目中的html文件时开始
- 可以't从客户端应用程序引用插件中定义的静态方法
- 更好的设计,以便从对象的方法引用自己的对象的属性
- 从充当事件处理程序的多个方法引用对象属性
- 在 JavaScript 中,如何从更深层次的嵌套方法引用方法的返回值
- 使用bind来确保方法引用对象,但它不引用对象;似乎不起作用
- 我如何在ruby中使用cgi方法引用jquery库
- 将方法参数/参数传递给方法引用绑定,匿名,命名
- 工厂方法引用混淆,并指导其编码
- 我们如何使用node . js的填充方法引用mongodb
- 为什么不是't我的Vue方法引用了正确的上下文(数据)