在js中运行window.open()在chrome中执行不同的操作

时间:2013-03-19 01:36:24

标签: google-chrome tabs window window.open

我们正在使用javascript开发一个Web应用程序,我们使用chrome作为我们用户的默认浏览器。 现在我们在应用程序中使用window.open时遇到了问题。

在我们的应用程序中,我们需要在新的浏览器选项卡中打开新页面,我们在js代码中使用了代码:window.open('http://ourUrl.com','_ blank');

根据执行此行代码的时间,浏览器的操作会有所不同。

情况1:用户单击一个按钮,click事件将触发我们的js功能,在此功能中,直接执行此行代码,然后浏览器可以在新的浏览器选项卡中打开该页面。 (这就是我们想要的。)

情况2:用户点击了一个按钮,在按钮点击事件的处理程序中,我们首先通过ajax将页面上的数据提交给我们的服务器,而在回调函数中,我们执行这行代码,它可能会弹出一个没有工具栏而不是浏览器标签的独立新窗口。(这不是我们想要的)。

我不明白为什么浏览器的动作不同,任何人都可以帮忙解释一下?

感谢。

1 个答案:

答案 0 :(得分:0)

正如我在this question上所解释的那样,为了在新标签页(而不是新窗口)中打开URL,必须在范围内调用 window.open 函数。用户生成的动作回调(例如,在 onClick 的范围内)
在任何其他情况下,URL将在新窗口中打开。

解释您的体验:
情境1: window.open 在用户生成的操作的回调中被调用。这就是它在新标签中打开的原因 情境2:在这种情况下, window.open 函数在ajax响应回调的范围内调用,该回调是用户的不同范围(在上下文之外)生成的行动。

对于打开新选项卡(而不是窗口)的第二种情况,您需要在用户单击后立即同步调用 window.open ,而不是作为另一个操作的回调(ajax响应) )。