In-browser-javascript: 在什么情况下 window.open 返回 null/undefined?

Ser*_*gio 2 javascript window

我的 Web 应用程序的异常处理代码有时会报告 window.open 返回 null 或未定义。这是偶发的,我看到它在 Firefox 4.0.1 和 5.0 上发生的大部分时间,在较小程度上发生在 Chrome 上。

何时以及为什么会发生与特定浏览器相关的情况?

我听说 IE8 和 IE9 在保护模式下工作时可以做到这一点。真的吗?那么火狐呢?歌剧?铬合金?苹果浏览器?

重要笔记:

  1. window.open 直接在 onclick 事件中调用(它不会被延迟,因为这会导致大多数浏览器的弹出窗口阻止程序显示警报)。
  2. window.open 打开一个空白窗口,然后通过 javascript 操作其 HTML 内容
  3. 请不要回复告诉我“你为什么使用 window.open?为什么不做(这里的其他任何事情)”,因为这将是题外话。

Ser*_*gio 5

我将尝试用我收集到的信息来回答我自己的问题。一旦我发现更多,我会更新它。

火狐:

嵌入在 Firefox 中的弹出窗口阻止程序会自动阻止对 window.open 的所有异步调用,效果是 window.open 返回 null/undefined。

为避免这种情况,window.open 调用必须是同步的,并且直接源自显式的用户操作,例如鼠标单击。

如果您需要根据来自异步事件(例如:XMLHttpRequest)的数据修改打开的窗口,您可以同步打开一个空窗口,缓存返回的窗口对象,然后再更新它。

这个“hack”适用于所有浏览器。