I have the following function, which I use (admitedly, as a hack, since I still havent understood javascript’s bizzare variable scoping rules), to fetch all global variables with a known prefix, from within a script.
The function works well with FF and Google Chrome (presumbaly it would work with all Moz derivative browsers). However, I just tested it in IE8 (aka Uncle Bill [as in Bill Gates] browser), and (perhaps unsuprisingly), the function did not work. I debugged the function and it appears that global variables are stored in another object (I could be wrong, I’ve only been reading on JS for a couple of days now). In any case, here is the function, which works correctly in ‘Moz bazed browsers:
function getGlobalProperties(prefix) {
var keyValues = [], global = window; // window for browser environments
for (var prop in global) {
if (prop.indexOf(prefix) == 0) // check the prefix
keyValues.push(prop + "=" + global[prop]);
}
return keyValues.join('&'); // build the string
}
Do I need a conditional branch (and a test to see if running under IE)?
It’s known issue, IE does not expose global variables for for-in loop over window object (inspite that fact that accessing global variables directly like window.globalVar works).
The possible workaround is to declare global variables explictly as members of window object, like:
By declaring variables in such way in the beginning of script you’ll make them accessible for for-in loop.
The better solution of course is to avoid global vars 🙂
Or at least keeping all them in separate variable which you can later traverse without hacks.