0

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

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

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

在此处输入图像描述

我需要做些什么才能使它停止抛出错误并在 IE8 中工作?(我假设它是try抛出错误的部分,但是如果控制台中有任何错误,此代码将不会通过我们的 QA 流程,那么我需要做什么才能使它起作用?我应该放弃 try/catch并对用户代理进行测试,如果是 IE8,将属性设置为未定义?

更新

是的,变量已定义。我已经添加了一些警报,因为 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 的开发工具没有为错误提供行号)是由试图将值设置为未定义的行抛出的。

4

1 回答 1

1

显然,这是 IE8 中的一个记录问题 - 请参阅 Kangax 在此处delete对关键字的详尽描述。尝试在 IE 8中删除任何对象属性,而不仅仅是属性,都会引发错误。deletewindow

我建议简单地设置locator_init_in_progressundefined. 您是否有特殊原因需要移除该属性?我发现将属性设置undefined为通常比使用delete关键字更安全,因为 delete 并不总是按照开发人员认为的方式运行。

于 2013-08-20T19:01:15.400 回答