【问题标题】:Javascript SetInterval Not Working in IEJavascript SetInterval 在 IE 中不起作用
【发布时间】:2016-01-21 01:34:16
【问题描述】:

我正在使用 window.open 打开一个弹出窗口并使用 setinterval 函数来等待并刷新背景页面,一旦弹出窗口关闭。 该代码在 Chrome 和 Firefox 中运行良好,但在 IE 中无法运行。

基本上问题是:在 IE 中,它不会等到弹出窗口关闭。弹出窗口打开后,它会立即刷新。 我在 IE 9 和 IE 11 中都看到了这个问题。

有什么解决办法吗?

这是代码:

var url = "/apex/VFP_Add";
var win = window.open(url, "Add" ,"width=600, height=300, scrollbars=yes"); 
win.moveTo(500, 100); 
win.focus(); 
var timer = setInterval(function() { 
if(win.closed) { 
clearInterval(timer); 
window.location.reload(); 
} 
}, 500);

我在 if(win.closed) 检查之前和检查之后放置警报。对于第一个警报,它显示为 False。在第二个警报中,在“如果检查”之后,它显示为 True。这很奇怪,因为我没有关闭窗口。

【问题讨论】:

  • 请说明您遇到问题的 IE 版本。
  • 与其定期检查子窗口是否关闭,不如在onbeforeunload子窗口的事件处理函数中做点什么

标签: javascript internet-explorer


【解决方案1】:

这似乎是 IE 中的一个已知错误。见这篇文章:https://support.microsoft.com/en-us/kb/241109

他们的解决方案是当您检测到它在 IE 中运行时,基本上否定 win.closed 的值。比如:

if(win.closed || isRunningInIE()) {
    clearInterval(timer); 
    window.location.reload(); 
}

检测 IE 有多种方法,因此您可以使用自己喜欢的方法代替 isRunningInIE() 函数。

【讨论】:

  • 谢谢 zaparaker。即使我使用否定它也没有用,最后我选择了基于 jquery 的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 2012-01-20
  • 2015-06-17
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多