删除IE中的窗口属性 - 尝试/捕获抛出错误

时间:2013-08-20 18:25:58

标签: javascript internet-explorer-8

所以我有一个我需要删除的窗口属性变量,当然IE讨厌delete方法。我已经尝试了here找到的解决方案,如下所示:

try {
   delete window.locator_init_in_progress;
}
catch (e) {
   window.locator_init_in_progress = undefined;
}

现在我在IE8中收到以下错误:

enter image description here

我需要做些什么来阻止错误并在IE8中工作? (我假设它是导致错误的try部分,但如果控制台中有任何错误,此代码将无法通过我们的QA流程,那么我需要做什么才能实现这一点?我应该只是放弃try / catch并对user-agent进行测试,如果是IE8,将属性设置为undefined?

更新

是的,定义了变量。我已经添加了一些警报,因为IE8可以在console.logs上爆炸。这是我目前的代码:

// window.ie8orearlier is a global variable that is set 
// based on user agent string; in this case it's correctly 
// evaluating to true when testing in IE8

if(window.ie8orearlier && window.locator_init_in_progress!= undefined && window.locator_init_in_progress == true) {
   alert("ie8 and value is set; not undefined");
   window.locator_init_in_progress = undefined;
}
else if(window.ie8orearlier && window.locator_init_in_progress == undefined) {
   alert("ie8 and undefined; do nothing");
}
else {
   alert("else");
   delete window.locator_init_in_progress;
}

它一直在点击“ie8和值设置;未定义”警报。这个错误,据我所知(IE8的开发工具不提供错误的行号),被试图将值设置为未定义的行抛出。

1 个答案:

答案 0 :(得分:1)

显然这是IE8中记录的问题 - 请参阅Kangax对delete关键字here的全面记录。在IE 8中尝试使用delete删除任何对象属性而不仅仅是window属性会引发错误。

我建议您只需将locator_init_in_progress设为undefined即可。是否有特殊原因需要删除该属性?我发现将属性设置为undefined通常比使用delete关键字更安全,因为删除并不总是像开发人员认为的那样。