摘要:問題公司有個項目,功能很簡單,讀取業務數據,展示在頁面上。結論不能直接引用,一旦語句中出現引用,后面的代碼就不再執行了,就像個黑洞,把光都吸走了,無影無蹤。
問題:
公司有個項目,功能很簡單,讀取業務數據,展示在頁面上。
一個很簡單的問題,卻因為目標瀏覽器是IE9,卡了三天。
前端給的反饋是:
在IE9下,程序一會兒對,一會兒不對……第一次刷不出來,多刷幾次就刷出來了。
這些話,聽著就覺得怪,如果聽之任之,就成了不明就里一筆糊涂賬。
于是,我開始跟他們一起調試,就在大家快要放棄的時候,我發現,這個“一會兒對,一會兒不對”跟console對象的引用有關,只要把引用了console對象的語句注釋掉,腳本的運行結果就總是正確,反之,就“一會兒對,一會兒不對”。
BUG找到了,但我還是覺得這個console得徹底搞清楚,不然還得至少踩兩三年的坑。
Does IE9 support console.log, and is it a real function?
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.
真不知道這家伙從哪學會的秘籍,這么詭異的現象,即便自己發現了,也不敢這樣總結。
結論:
IE9不能直接引用console,一旦語句中出現console引用,后面的代碼就不再執行了,console就像個黑洞,把光都吸走了,無影無蹤。
一旦你想要借助Development Tools去調試一下,看看是不是console引用出了問題,IE9就會馬上創建一個console對象,然后這個BUG就不見了!這時候你關掉Development Tools,console依然還在……下次你再打開新頁面,console又成了黑洞。
如果沒有旁人的幫助,不大可能從這個坑里爬出來的,我們只能告訴客戶,程序在IE9中運行的結果是“一會對,一會兒不對,好像是隨機的……”。
解決方法:
把window.console復制給console
console = window.console || {};
然后再給這個空的console對象,添加一些空的方法,讓它們在IE9以及其他不支持console的瀏覽器上不要拋異常,好讓我們的程序順利執行。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100100.html
摘要:事件相關內容當用戶與瀏覽器發生的一些交互時如果希望去獲得用戶行為就需要借助事件來完成事件部分內容在中重要性不言而喻羅列需要了解與事件相關的知識如下這也是面試中遇到的問題事件的級別事件模型事件流事件處理程序描述事件捕獲冒泡的具體流程對象常見的 DOM事件相關內容 當用戶與瀏覽器發生的一些交互時, 如果希望去獲得用戶行為, 就需要借助事件來完成. 事件部分內容在 JS中重要性不言而喻. ...
摘要:事件相關內容當用戶與瀏覽器發生的一些交互時如果希望去獲得用戶行為就需要借助事件來完成事件部分內容在中重要性不言而喻羅列需要了解與事件相關的知識如下這也是面試中遇到的問題事件的級別事件模型事件流事件處理程序描述事件捕獲冒泡的具體流程對象常見的 DOM事件相關內容 當用戶與瀏覽器發生的一些交互時, 如果希望去獲得用戶行為, 就需要借助事件來完成. 事件部分內容在 JS中重要性不言而喻. ...
摘要:指定事件處理程序指定事件處理程序主要有兩種方式級事件處理程序級事件處理程序。添加事件處理程序注意這里是哦或移除事件處理程序使用移除事件處理程序的條件與方法相同必須提供相同的參數,從而添加的匿名函數也無法被移除。 今天看書又看到事件,遂決定小總結一下~ JavaScript與HTML之間的交互是通過事件實現的。事件,就是文檔或瀏覽器窗口中發生的一些特定的交互瞬間。可以使用監聽器(事件處...
摘要:指定事件處理程序指定事件處理程序主要有兩種方式級事件處理程序級事件處理程序。添加事件處理程序注意這里是哦或移除事件處理程序使用移除事件處理程序的條件與方法相同必須提供相同的參數,從而添加的匿名函數也無法被移除。 今天看書又看到事件,遂決定小總結一下~ JavaScript與HTML之間的交互是通過事件實現的。事件,就是文檔或瀏覽器窗口中發生的一些特定的交互瞬間。可以使用監聽器(事件處...
閱讀 3400·2021-11-24 10:30
閱讀 3269·2021-11-22 15:29
閱讀 3706·2021-10-28 09:32
閱讀 1254·2021-09-07 10:22
閱讀 3336·2019-08-30 15:55
閱讀 3619·2019-08-30 15:54
閱讀 3494·2019-08-30 15:54
閱讀 2833·2019-08-30 15:44