天天看點

IE9BUG!預設不支援console.log

IE9不支援預設不支援

console.log

,但是按

F12

打開開發人員工具視窗就支援了。

這破bug!

起因是為了判斷一個intervalID是否被釋放了,就重寫了window預設的實作

__timeoutlCahceData = {};
    window.__setTimeout = window.setTimeout;
    window.setTimeout = function (code, delay) {
        var ret = window.__setTimeout(code, delay);
        __timeoutlCahceData[ret] = ;
        return ret;
    }
    window.__clearTimeout = window.clearTimeout;
    window.clearTimeout = function (intervalId) {
        window.__clearTimeout(intervalId);
        __timeoutlCahceData[intervalId] = -;
    }
    window.isTimeoutCleared = function (intervalId) {
        var ret = __timeoutlCahceData[intervalId] === -;
        console.log(intervalId + ": clear status is " + ret)
        return ret;
    }
           

寫完自以為挺完美,緊接着遇到BUG,如果這個腳本在檔案中被錯誤的引用多次,那麼就會進入死循環。

這個好解決,隻需要加個判斷即可于是馬上修改:

if(!window.__setTimeoutOverrided) {
    window.__setTimeoutOverrided = true;
    window.__timeoutlCahceData = {};
    window.__setTimeout = window.setTimeout;
    window.setTimeout = function (code, delay) {
        var ret = window.__setTimeout(code, delay);
        window.__timeoutlCahceData[ret] = ;
        return ret;
    }
    window.__clearTimeout = window.clearTimeout;
    window.clearTimeout = function (intervalId) {
        window.__clearTimeout(intervalId);
        window.__timeoutlCahceData[intervalId] = -;
    }
    window.isTimeoutCleared = function (intervalId) {
        var ret = window.__timeoutlCahceData[intervalId] === -;
        //console.log(intervalId + ": clear status is " + ret)
        return ret;
    }
}
           

運作正常了!

再後來就是遇到console.log和ie9的一些挫折了。。。

繼續閱讀