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

osc*_*tin 3 internet-explorer popups

没有什么比填写一个充满数据的整个表单更让我恼火的了,只是点击了一个想要打开弹出窗口的按钮,而 IE 必须刷新整个页面,这导致我丢失了我在表单中输入的所有内容。

为什么?

IE 的弹出窗口拦截器最初是否重写了页面的源代码或其他内容,以便脚本无法打开弹出窗口。这就是为什么当您告诉它允许弹出窗口时它必须完全刷新页面,以便在不修改源以禁用弹出窗口的情况下刷新?

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

gro*_*taj 8

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


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

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

  1. 没有。有可能不会发生任何不好的事情,但你不能确定。
  2. 脚本可能会中断,使应用程序无法使用,直到您刷新网页,有时甚至在您清除 cookie 之前。
  3. 可能会发生意想不到的事情,可能会造成安全漏洞。

无法以编程方式预测稍后打开弹出窗口的确切结果,因此 IE 只是阻止您破坏某些内容 - 如果您重新加载网页,脚本将再次处理,但弹出窗口会在正确的时刻出现。