所以我有一个我需要删除的窗口属性变量,当然IE讨厌delete
方法。我已经尝试了here找到的解决方案,如下所示:
try {
delete window.locator_init_in_progress;
}
catch (e) {
window.locator_init_in_progress = undefined;
}
现在我在IE8中收到以下错误:
我需要做些什么来阻止错误并在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的开发工具不提供错误的行号),被试图将值设置为未定义的行抛出。
答案 0 :(得分:1)
显然这是IE8中记录的问题 - 请参阅Kangax对delete
关键字here的全面记录。在IE 8中尝试使用delete
删除任何对象属性而不仅仅是window
属性会引发错误。
我建议您只需将locator_init_in_progress
设为undefined
即可。是否有特殊原因需要删除该属性?我发现将属性设置为undefined
通常比使用delete
关键字更安全,因为删除并不总是像开发人员认为的那样。