Reputation: 10039
This is my code (in a firefox addon)
this.something_something = function (the_actual_url) {
this.this_version = null;
try {
// Firefox 4 and later; Mozilla 2 and later
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID("[email protected]", function (addon) {
this_version = addon.version;
});
}
catch (ex) {
// Firefox 3.6 and before; Mozilla 1.9.2 and before
var em = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
var addon = em.getItemForID("[email protected]");
this_version = addon.version;
}
this.timervar = setTimeout(function () {
this.get_plugin_version(this.this_version);
}, 2000);
}
this.get_plugin_version = function (blah) {
alert("aa:" + blah);
}
I get the error:
Error: this.get_plugin_version is not a function Source File: chrome://mf_monkey_project/content/overlay.js Line: 476
What am I doing wrong?
Sorry about the screwed up formatting, but i deleted the bulk of the code to fit here and it made the formatting all screwy.
Upvotes: 0
Views: 218
Reputation: 322452
Because the setTimeout
callback will be executed in the global context.
You can use the bind()
[docs] method to bind the desired context and argument for the callback.
this.timervar=setTimeout( this.get_plugin_version.bind(this, this.this_version),
2000 );
If you don't want the current value of this.this_version
permanently bound as the first argument, then remove it from the .bind()
call.
Upvotes: 1