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

时间:2011-07-05 13:41:12

标签: javascript window

我的Web应用程序的异常处理代码有时会报告window.open返回null或undefined。 这是零星的,我发现它大部分时间都在Firefox 4.0.1和5.0上发生,而在较小程度上发生在Chrome上。

何时以及为何与特定浏览器相关联?

我听说IE8和IE9在保护模式下工作时可以做到这一点。真的吗?那火狐呢?歌剧?铬?的Safari?

重要说明:

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

1 个答案:

答案 0 :(得分:3)

我会尝试用我能够收集的内容回答我自己的问题。 我会在发现更多内容后立即更新。

<强>火狐:

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

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

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

此“黑客”适用于所有浏览器。