I want to use a Javascript Module (JSM) in a single window of my Xul application, so I can load the resource as I need it.
But, I need to pass the window to the JSM, and I don't know how to do it. Follows my attempt:
In my resource.jsm:
var EXPORTED_SYMBOLS = ["hello"];
function hello(win) {
win.alert("ALERT FROM JSM!");
}
calling in my window with:
Components.utils.import("resource://module/resource.jsm");
hello(window);
but I get:
win is undefined
in the resource.jsm.
Any idea how to make it work?
It might be causing problems that you named the parameter for your
hello
function to bewindow
. While window isn't a reserved word, most browser environments treat it as an unassignable constant of sorts. Try:in your module and then invoke it with
hello(window)
,hello(document.window)
, orhello(this)
After reading the Javascript Module documentation, it looks like you'll need to create an object within the module and then change it's property by reference. So in your JSM:
Then you'd invoke by first assigning the window to that parameter and then calling the function:
Note: I am not familiar enough with JSMs to know if there's a better way to do this, but this should work.