为什么如果我想允许阻止弹出窗口,IE(7、8、9、10)会让我刷新整个页面?

为什么如果我想允许阻止弹出窗口,IE(7、8、9、10)会让我刷新整个页面?

没有什么比填写完整表格后点击按钮打开弹出窗口更让我恼火的了,IE 不得不刷新整个页面,导致我丢失一切我在表格中输入了内容。

为什么?

IE 的弹出窗口拦截器是否会首先重写页面源代码或类似的东西,以便脚本无法打开弹出窗口。这就是为什么当您告诉它允许弹出窗口时,它必须对页面进行完全刷新,以便刷新而不修改源代码以禁用弹出窗口?

有没有办法告诉 IE 它可以允许页面弹出窗口而无需刷新?

答案1

TL;DR:因为网页实际上是应用程序,并且在不希望打开时打开弹出窗口可能会引入未定义的状态。


弹出窗口使用 JavaScript 显示。有时脚本可能希望弹出窗口做出一些反应。当浏览器阻止弹出窗口时,它必须通知脚本出了问题,以便采取适当的措施。(或者它只是取消整个脚本,这对于这个问题并不重要)

如果您稍后打开该弹出窗口,它可能会想要使用尝试显示它的脚本做出反应。但是脚本执行现已结束,应用程序将进入正常应用程序流程中永远无法进入的状态,因此应用程序很可能无法正确处理它。会发生什么?

  1. 没什么。可能不会发生任何不好的事情,但你无法确定。
  2. 脚本可能会中断,导致应用程序无法使用,直到您刷新网页,或者有时甚至直到您清除 cookie。
  3. 可能会发生一些意外的事情,并可能造成安全漏洞。

稍后打开弹出窗口的确切结果无法通过编程预测,因此 IE 只是防止您破坏某些东西 - 如果您重新加载网页,脚本将再次被处理,但弹出窗口会在适当的时刻出现。

相关内容