IE 8中的execScript try / catch oddity

时间:2012-05-23 18:53:23

标签: javascript

我在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
   }
}

1 个答案:

答案 0 :(得分:1)

我已经看到当IE的脚本引擎遇到无效的javascript时出现这个错误(我最近的例子:尝试通过COM直接通过SHDocVw.dll调用无效的javascript或不存在的函数)。因此,我将该错误消息解释为IE8只是简单地认为您正在为它提供无效的东西,无论如何都会窒息。

这可能是问题吗? IE 8 defaultView equivalent虽然在IE9中我document.defaultView.eval.call似乎仍然可以正常使用。

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