【发布时间】: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