我在一个相对庞大的 ECMAScript 代码库(> 60,000 LOC)上工作,我们往往会为我们可怕的朋友 Internet Explorer(尤其是 6 和 7)检测错误而费力。
目前,我被一个问题困扰了 3 天,我的 RIA 在 Google Chrome、Firefox 3.6、Opera 和 Internet Explorer 8 中呈现良好,但在 IE7 模式下运行 Internet Explorer 8(或使用真正的 IE)时失败-7)。
我的问题真的是:你如何识别会在 IE7 中产生错误的代码?
通常我依赖 JSLint 并且我倾向于捕捉通常的嫌疑人(尾随逗号,我讨厌你),但在这种特殊情况下,我刚刚对我的所有代码重新运行了一个 linter,包括源代码和最小化代码,它没有产生我通常的嫌疑人。所以我想我错误地引入了 IE 不喜欢的东西(谁知道呢,也许我疯了,在某处使用了 Array.map 而不是 dojo.map?)它在我的脸上炸开了,产生了很好的错误消息对我一点帮助都没有(“[object object]”和“is null”,它不应该是,所以我假设上游有一个错误,它默默地失败并阻止了这个对象的创建)。
我试过看一下 Google Closure Linter,但它并没有产生什么特别的东西,而且我也不认为 Google Closure Compiler 会成为我的救星。是否有任何工具(命令行、Web 服务或其他)可以解析/运行代码,就好像它正在模拟 IE 一样,以便我们可以得到适当的错误?
任何提示表示赞赏。
编辑:感谢您迄今为止在尝试解决我的问题方面的帮助,但我真正要问的是是否有工具可以进行此类检查,这意味着针对特定浏览器验证功能集和语法。在我看来,这是 JS 世界中严重缺乏的东西(对于 FF 或 Chrome 来说,显然它们的调试器更有帮助)。
EDIT2:我今天(3天后)最终找到了我的问题的根源,通过在两个分支之间进行所有代码更改并意识到问题实际上已经存在但之前从未检测到并通过更旧的更改来缩小范围混乱并最终最终在所有地方添加控制台日志,直到我遇到故障点(上帝感谢emacs的正则表达式支持,可以将日志添加到每一行......很重但有效......)。有趣的事实是:IE 吞下了一个错误消息,该消息应该显示在 try catch 块中,最初是捕获源问题,然后重新抛出它。仍然不知道为什么,但如果没有,那会更容易找到,因为它是为此目的而设计的,以防万一它坏了。诡异的。可能不喜欢深层次的重投。
我会留下这个问题,因为现在没有实际问题的答案。