I have a JS script that works fine in all browsers. But for everybody's surprise, in I.E. it does not work at the first try.
If, after I load my page, I press F12 (open the i.e. debugger) and refresh my page, it works fine! Just like the others browsers! But for this work, i have to press F12.
Does i.e.'s debugger do something when we open it? I cant find a solution!
Thanks in advance.
Do you have something like console.log()
in your script? This might explain, since there is no console until you press F12
Extended version from previous post
if (!('console' in window)) {
var stub = function() { ; };
window.console = {
log : stub,
info : stub,
warn : stub,
error : stub,
assert : stub
};
}
I'm posting this new one that install stub only if needed
/**
* On IE console is not set if not opened and debug doesn't exists
*/
(function() {
if (!('console' in window)) { window.console = {}; }
var kind = ['log', 'info', 'warn', 'error', 'assert', 'debug'];
var stub = function() { ; };
for (var i = 0; i < kind.length; i++) {
if (kind[i] in window.console) { continue; }
window.console[kind[i]] = stub;
}
})();
When you don't have the debugger open, IE considers there to be no such thing as console.log, and gives you errors for calling an undefined function. When you hit F12, then you get the console, and so console.log is no longer undefined.
You can workaround by putting this at the top of your code:
if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };
Rather than editing out console.log from your code, this will merely make the browser do nothing if the console doesn't exist, by defining them as a 'do nothing' function if they are undefined.
If you're looking to shrink down your js file size (particularly important for mobile usage), you will eventually want to remove verbose logging on your release version.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With