Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I.E. craches my JS script at first, then i press F12 and it works beaultifully

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.

like image 793
Fernando Ferrari Avatar asked Jul 05 '12 14:07

Fernando Ferrari


3 Answers

Do you have something like console.log() in your script? This might explain, since there is no console until you press F12

like image 22
Corné Hogerheijde Avatar answered Oct 05 '22 05:10

Corné Hogerheijde


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;
    }
})();
like image 30
showi Avatar answered Oct 05 '22 05:10

showi


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.

like image 197
sylverfyre Avatar answered Oct 05 '22 06:10

sylverfyre