execScript try/catch in IE 8 中的怪异之处

execScript try/catch oddity in IE 8

本文关键字:try catch in IE execScript      更新时间:2023-09-26

我在try/catch块中使用execScript来执行一段字符串化的JavaScript。如果字符串在execScript中有一个javascript错误,则在随后重新加载页面时,将在IE 8中的catch块中返回以下错误:

"错误:由于错误80020101,无法完成操作。">

是否有任何其他方法可以在IE 8中全局评估javascript,这些方法不会引发像上面那样的通用错误。我知道使用 eval 是行不通的,因为它不会在全局上下文中评估 javascript。

下面是关于我的代码的一些设置,fn 是要计算的字符串:

// fn is defined somewhere above this code
function globalEvaluation() {
    if(document.defaultView) {
       document.defaultView.eval.call(undefined, fn);
    } else if (document.parentWindow) {
        document.parentWindow.execScript(fn);
    } 
}
return function() {
    try {
         globalEvaluation();
    } catch(e) {
       // do some error handling
       // in IE 8 I get the 80020101 error
   }
}

当IE的脚本引擎遇到无效的javascript时,我看到会发生此错误(我最近的例子:尝试通过COM直接通过SHDocVw调用无效的javascript或不存在的函数.dll(。 所以我把这条错误消息解释为IE8只是简单地认为你给它喂的东西是无效的,无论如何都会窒息。

这可能是问题所在吗?IE 8 默认视图等效 虽然document.defaultView.eval.call似乎在 IE9 中对我来说仍然很好用。

我的猜测是fn中存在错误,也许某些内容仍然超出范围?如果你传递它认为无效的东西,我相信它总是会抛出那个无用的错误。fn是否正在自己进行任何空检查/错误处理?