IE中的“无效参数”错误,在不存在的行号中

时间:2009-06-17 16:50:02

标签: javascript internet-explorer debugging

我在IE 6中遇到以下错误:

Line: 454  
Char: 13  
Error: Invalid Argument  
Code: 0  
URL: xxxxx/Iframe1.aspx 

我无法为我的生活找到导致这种情况的原因。

这只发生在我有一个主页面有几个IFrame的情况下,它只发生在我有一个特定的IFrame(错误消息中的URL指向的那个),并且IFrame在装货时间 我把它缩小到那里,但我仍然找不到更具体的......

有问题的IFrame在其HTML中没有454行,也没有引用任何JS文件。

我尝试将VS附加到iexplore.exe作为调试器,并在发生错误时中断,但随后告诉我“当前位置没有可用的源代码”...

关于我如何追逐这个的任何建议?


更新:我通过蛮力发现了这个问题,基本上,将所有内容评论出来并随意取消注释...
但问题仍然存在:当IE报告错误的行号/文件时,找出错误位置的合理方法是什么?

8 个答案:

答案 0 :(得分:11)

IE的Javascript引擎在调试方面很恶心。您可以尝试在“高级选项”中启用脚本调试,然后如果安装了Visual Studio,它将跳转到错误位置...如果您很幸运。其他时候你没有得到任何东西,特别是如果代码是eval()'ed。

关于这些行号的另一个问题是它没有反映出错误发生在哪个文件中。我曾经遇到过行号实际上是正确的情况,但它是在链接的.js文件中,而不是主文件文件。

答案 1 :(得分:6)

尝试使用Microsoft Script Debugger或DebugBar(http://www.debugbar.com),这可能会为您提供更好的IE6调试工具。他们总是帮助我使用IE6。

此外,这是在IE的任何较新版本中发生还是仅在IE6中发生?

答案 2 :(得分:5)

如果没有实例,几乎不可能调试它,但是在Internet Explorer中经常导致“无效参数”错误的一件事是尝试为样式属性设置不正确的值。

类似于:

document.getElementById("foo").style.borderWidth = bar + "px";

当“bar”的值为null或未定义,或者是字符串“grandma”时,将导致它,因为“grandmapx”不是borderWidth样式属性的有效值。

答案 3 :(得分:2)

IE9具有浏览器模式。

打开开发人员工具,然后在控制台中选择要模拟的版本,重新加载包含错误的页面,控制台将显示行号和错误所在的正确文件。

答案 4 :(得分:1)

我也经常遇到这个问题,我也一直在评论所有内容,直到找到问题为止。我觉得有用的一件事是为每个javascript方法添加一个try / catch块。有时我会添加一个警报来告诉错误来自哪种方法。仍然乏味,但比试错评论更容易。如果你每次编写一个新方法时都添加它们,它会在发生错误的事件中节省大量时间。

function TestMethod()
{
    try
    {
        //whatever
    }
    catch (ex)
    {
        ShowError(ex.description);
        //alert("TestMethod");
    }
}

答案 5 :(得分:1)

给其他读者的说明:我最近有这个“无效的论点”。在IE7-9中报告错误并最终发现它与我使用setTimeout / setInterval的方式有关。

这是错误的,在IE中:

var Thing = {};
Thing.myFunc = function() { ... };
setTimeout(Thing.myFunc, 1000);

相反,将回调包装在一个匿名函数中,如下所示:

var Thing = {};
Thing.myFunc = function() { ... };
setTimeout(function() { Thing.myFunc(); }, 1000);

并且不再出现“无效参数”错误。

答案 6 :(得分:0)

另一种可能性:

我在两台计算机之间做了大量的开发工作,无论是在家还是在工作,所以我经常给自己发电子邮件或从服务器上下载页面进行处理。最近我意识到Vista有一种习惯,即在以某种方式下载某些文件时单方面应用块,而不会通知我它正在执行此操作。

结果是,例如,HTML页面想要在其标头中访问.js文件,但它没有访问本地文件的权限。在这种情况下,无论你在.js文件中写什么,浏览器都不会读它,并且会产生令人讨厌的Line: 0错误。

因此,在梳理代码以查找错误之前,请检查HTML页面的属性,看看它是否已被操作系统阻止....

答案 7 :(得分:0)

就像NickFitz所指出的那样,造型是我的代码的一个问题。

document.getElementById('sums<%= event.id %>').style.border='1px solid #3b3b3b;'

我删除了边框样式,我的IE问题已经消失。