在升级到jQuery 1.6.2之后,当尝试在页面上执行javascript时,globalEval会抛出一个错误

After upgrading to jQuery 1.6.2, globalEval throws an error when trying to execute javascript on page

本文关键字:globalEval javascript 一个 错误 执行 jQuery 之后      更新时间:2023-09-26

我从jQuery 1.4.2升级到1.6.2,现在我得到错误(在IE中)。页面上有JavaScript通过jQuery globalEval()函数

执行
// 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,无法完成操作。"

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

<!-- 
var id = '"ctrl90900'";
var url = '"myur.com/blah.html'";
-->

我使用IE9, jQuery 1.6.2不知道为什么这会导致错误。

如果在传递给execScript的脚本中有任何错误,就Internet Explorer而言,它将报告80020101而不是原始错误。

所以,也检查丢失的分号和不支持IE的JS特性。

对于较短的代码段,我发现最有效的调试技术是注释掉部分代码,看看错误是否仍然出现。如果没有,检查刚刚被注释掉的代码块是否有上述错误。

这可能是代码的注释,这是无效的JavaScript,在这个时代是不必要的。

你可以用这个regex去掉它…

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

jsFiddle .

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

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

所以底线是,确保代码中没有任何未定义的函数通过AJAX返回。