2013-01-31 109 views
2

從運行AJAX應用程序的角度來看,什麼改變了,何時開放了IE開發者工具當IE開發者工具打開時,JavaScript會發生什麼變化?

我現在正在跟蹤一些Schrödingerbug。這是關於下拉列表列表從PrimeFecesIE。他們有時候不會在點擊後打開,而是在瀏覽器最大化或解壓縮內容後獲得「暢通無阻」。由於這些下拉菜單是在正常輸入的基礎上實現的,附帶div,我認爲這是錯誤地計算顯示下拉彈出窗口的地方。我也假設AJAX錯誤。

但是在打開IE開發工具之後,幾乎不可能重現錯誤。在控制檯中沒有顯示錯誤,沒有AJAX請求掛起,更重要的是,一切似乎都運行得更多。

該錯誤僅適用於IE,因此開發人員工具是調試它的唯一方法。然而,在打開時,似乎觀察在某種程度上改變了狀態,就像在量子力學......

所以,我需要知道,有什麼能打開這些開發工具就可以更換,防止了錯誤顯示出來?

- 編輯 -什麼console.log。這是計算不可見元素大小的問題。該問題已通過向主體添加滾動來解決。但是,問題是開放的,IE開發人員工具如何影響這些計算。

+0

你有一個生動的例子嗎?您使用的是哪個版本的IE?你有沒有設置斷點? – MarcoK

+2

你的腳本中是否有任何控制檯輸出('console.info(somevar)')?當開發者工具未打開時,這會在IE中導致異常。 – hsan

+1

這是量子糾纏,每當你打開你的控制檯時,其他開發者的代碼都會在銀河系的其他地方變得鬼鬼祟祟。 –

回答

1

如果你真的想永遠包括使用console,我建議使用填充工具吧:

(function(b){ 
    var a=0; 
    var c=function(){}; 
    var d=["log","assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","profile","profileEnd","table","time","timeEnd","timeStamp","trace","warn"]; 
    b.console=b.console||{}; 
    for(;a<d.length;a++){ 
     b.console[d[a]]=b.console[d[a]]||b.console["log"]||c; 
    } 
})(window); 

這是我試圖讓可讀的縮小例子。這是我之前發現的並修改了一些內容。我認爲我修改的主要內容是,如果您調用最初不是由瀏覽器本地實現的方法console,它將調用console.log。如果console.log不是本地實現的,它只是調用一個空函數。此代碼的原始版本不包括此回退到console.log

這將「保證」console調用不會失敗。您可以更改d變量以僅包含您確定要使用的呼叫,否則會有一些額外的不必要處理。

+0

但我這是什麼不是控制檯的問題... –

+0

@lechlukasz正確的,但有人說,當他們使用'if(console)',這是你實際上(不是這個),他們會得到一個錯誤。上面的代碼使用不同的路徑。但似乎很確定問題在於'console'。完全關閉IE瀏覽器,然後用原來的代碼打開備份,這會給你帶來問題。根本不要打開開發者工具,並且看看你是否仍然遇到問題(你說它現在在奇怪的時候開始發生)。我不知道IE如何處理會話之間的緩存,所以如果您的JS位於外部文件中,您可能需要清除緩存以獲得更好的效果 – Ian

+0

但是,如果瀏覽器窗口的最大化如果與控制檯一起解決問題? –

相關問題