IE9不能直接引用Console

問題:前端

公司有個項目,功能很簡單,讀取業務數據,展現在頁面上。瀏覽器

一個很簡單的問題,卻由於目標瀏覽器是IE9,卡了三天。ide

前端給的反饋是:調試

在IE9下,程序一下子對,一下子不對……第一次刷不出來,多刷幾回就刷出來了。

這些話,聽着就以爲怪,若是聽之任之,就成了不明就裏一筆糊塗帳。code

因而,我開始跟他們一塊兒調試,就在你們快要放棄的時候,我發現,這個「一下子對,一下子不對」跟console對象的引用有關,只要把引用了console對象的語句註釋掉,腳本的運行結果就老是正確,反之,就「一下子對,一下子不對」。對象

BUG找到了,但我仍是以爲這個console得完全搞清楚,否則還得至少踩兩三年的坑。rem

Does IE9 support console.log, and is it a real function?get

In Internet Explorer 9 (and 8), the console object is only exposed when the developer tools are opened for a particular tab. If you hide the developer tools window for that tab, the console object remains exposed for each page you navigate to. If you open a new tab, you must also open the developer tools for that tab in order for the console object to be exposed.

真不知道這傢伙從哪學會的祕籍,這麼詭異的現象,即使本身發現了,也不敢這樣總結。it

結論:io

IE9不能直接引用console,一旦語句中出現console引用,後面的代碼就再也不執行了,console就像個黑洞,把光都吸走了,無影無蹤。

一旦你想要藉助Development Tools去調試一下,看看是否是console引用出了問題,IE9就會立刻建立一個console對象,而後這個BUG就不見了!這時候你關掉Development Tools,console依然還在……下次你再打開新頁面,console又成了黑洞。

若是沒有旁人的幫助,不大可能從這個坑裏爬出來的,咱們只能告訴客戶,程序在IE9中運行的結果是「一會對,一下子不對,好像是隨機的……」。

解決方法:

window.console複製給console

console = window.console || {};

而後再給這個空的console對象,添加一些空的方法,讓它們在IE9以及其餘不支持console的瀏覽器上不要拋異常,好讓咱們的程序順利執行。

相關文章
相關標籤/搜索