2013-01-31 73 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

但是,如果浏览器窗口的最大化如果与控制台一起解决问题? –

相关问题