2012-03-20 76 views
0

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

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

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

我不明白为什么行为不同。

任何想法?

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

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

其他更复杂一点,但在最后:

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

UPDATE2:我能够弄清楚发生了什么事情。如果JS在用户启动事件后立即打开外部窗口(用户基本点击) - 它会被浏览器视为新标签。如果我为相同的按钮单击事件处理程序放置了5秒延迟 - 它将被视为新窗口。

这对任何人都有意义吗?

+0

这是一个extjs窗口或只是一个普通的浏览器窗口 – dbrin 2012-03-20 20:12:39

+0

定期浏览器选项卡/窗口。它是外部PDF文件,我不想嵌入ExtJs窗口 – sha 2012-03-20 20:14:23

+0

是一个html链接和另一个js方法调用?发布调用window.open的实际代码 – dbrin 2012-03-20 20:32:55

回答

1

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

这对任何人都有意义吗?

+0

我遇到同样的问题,也尝试在新窗口中打开PDF。你最终解决了这个问题吗?虚拟onclick事件呢? – okyanet 2012-06-09 04:16:43

+0

是的。我在显示报告之前通过添加确认框来解决此问题。因此,第一份报告正在生成一段时间,然后当它准备好时 - 我显示确认框,并在用户点击之后 - 呈现报告。 – sha 2012-06-09 11:22:09

相关问题