升级到jQuery 1.6.2后,在尝试在页面上执行javascript时,globalEval会引发错误

时间:2011-08-15 23:43:26

标签: javascript jquery

我从jQuery 1.4.2升级到1.6.2现在我得到错误(在IE中)。我在jQuery globalEval()函数

执行的页面上有JavaScript
// Evaluates a script in a global context
// Workarounds based on findings by Jim Driscoll
// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
globalEval: function( data ) {
    if ( data && rnotwhite.test( data ) ) {
        // We use execScript on Internet Explorer
        // We use an anonymous function so that context is window
        // rather than jQuery in Firefox
        ( window.execScript || function( data ) {
            window[ "eval" ].call( window, data );
        } )( data );
    }
},

在IE中,调用抛出异常:

  

“错误:由于错误80020101,无法完成操作。”

执行的数据参数是<!-- -->包围的页面上的javascript变量

<!-- 
var id = \"ctrl90900\";

var url = \"myur.com/blah.html\";

-->

我正在使用IE9,jQuery 1.6.2不确定为什么会导致错误。

3 个答案:

答案 0 :(得分:2)

如果涉及Internet Explorer的any error at all in a script passed to execScript,,它将报告80020101而不是原始错误。

因此,还要检查缺少的分号和IE不支持的JS功能。

对于短代码段落,我发现最有效的调试技术是注释掉部分代码并查看错误是否仍然存在。如果没有,请检查刚刚针对上述错误进行注释的代码块。

答案 1 :(得分:1)

可能是代码的评论,这是无效的JavaScript和unnecessary in this day and age

你可以用这个正则表达式删除它......

$.globalEval(str.replace(/<!--\s*([\s\S]*?)\s*-->/, '$1'));

jsFiddle

答案 2 :(得分:0)

只是想为此添加一点 - 每当在包含JavaScript的AJAX调用的PHP脚本中时,我收到错误80020101。 PHP文件中的脚本也以某种方式破坏,并拒绝呈现指定div中的任何脚本(PHP的其他元素通过,但JavaScript内部没有任何内容 - 我试图使用HighChart绘制图表)。

原来在包含的PHP文件中的JavaScript中有一个未定义的PHP函数(用于回显一些文本)。我发现这是使用Firebug。

如此底线,请确保您在通过AJAX返回的代码中没有任何未定义的函数。