【问题标题】:window.open(url) different behavior - same code, different timingwindow.open(url) 不同的行为 - 相同的代码,不同的时间
【发布时间】:2012-04-05 07:57:35
【问题描述】:

我有一个 ExtJs 应用程序。当用户需要查看在服务器端生成的 PDF 报告时,我使用window.open() 函数打开一个新链接。我为提供存储在 Web 服务器上的 PDF 文件的服务传递 URL。

这个函数是从两个不同的地方调用的:用户可以滚动报表列表并单击其中一个上的工具栏按钮来查看报表,或者用户可以执行报表,等待它生成,然后应用程序会自动呈现它。两种情况之间的唯一区别 - 第二个是异步的,打开报告的最后一步是从回调函数调用的。

但这两种情况的行为不同。第一个 - 将在 Chrome 和 Safari 中打开新标签,这不会被视为 popup 窗口。在第二种情况下 - 它将在新窗口中打开(当然在相同的浏览器中 - 所以配置完全相同)。

我一直想弄清楚为什么行为不同。

有什么想法吗?

更新:澄清一下 - 两者都是 JS 调用。一个是这样的:

buttonClick: function() {
   window.open('myreporturl');
}

other 有点复杂,但最后:

runReport: function() {
   store.on('load', function {
      window.open('myreporturl');
   });
   store.load();
}

Update2:我能够弄清楚发生了什么。如果 JS 在用户启动事件后立即打开外部窗口(用户基本上点击) - 它会被浏览器视为新选项卡。如果我为同一个按钮单击事件处理程序设置 5 秒延迟 - 它会被视为新窗口。

这对任何人都有意义吗?

【问题讨论】:

  • 这是一个 extjs 窗口还是只是一个普通的浏览器窗口
  • 常规浏览器选项卡/窗口。它是外部 PDF 文件,我不想嵌入到 ExtJs 窗口中
  • 是一个html链接和另一个js方法调用吗?贴出调用window.open的实际代码
  • 都是js调用。这是最奇怪的部分。包括一些代码sn-ps。
  • 嗯确实我看不出有什么不同。我想知道浏览器对它们的处理方式是否不同,因为一个是直接的用户操作响应(按钮单击),而另一个是基于超时?

标签: javascript browser


【解决方案1】:

我能够弄清楚发生了什么。如果 JS 在用户启动事件后立即打开外部窗口(用户基本上点击) - 它会被浏览器视为新选项卡。如果我为同一个按钮单击事件处理程序设置 5 秒延迟 - 它会被视为新窗口。

这对任何人都有意义吗?

【讨论】:

  • 我遇到了和你一样的问题,也在尝试在新窗口中打开 PDF。你最后解决了吗?虚拟的 onclick 事件呢?
  • 是的。我通过在显示报告之前添加确认框来解决它。所以第一个报告正在生成一段时间,然后当它准备好时 - 我显示确认框,并且在用户点击那里后 - 呈现报告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多