javascript window.open 从回调

标签 javascript asynchronous callback window.open

从主线程调用的

window.open() 默认打开新标签页。

但是,每次都在这里打开新窗口(Opera 16 和 Google Chrome 29)

<input type="button" value="Open" onclick="cb1()">

<script type="text/javascript">  
function cb1() {
    setTimeout(wo, 1000); //simple async
}

function wo()
{
   var a = window.open("http://google.com", "w2");
   a.focus();
}
</script>

(哈哈,这是我对 Open a URL in a new tab (and not a new window) using JavaScript 的回答)。

如何在此处的选项卡中打开(浏览器默认)?

最佳答案

我们遇到了同样的问题并四处寻找答案。我们的发现适用于我们的环境,提炼出来的智慧如下:

该问题与阻止程序窗口打开的浏览器弹出窗口阻止程序有关。浏览器允许窗口从发生在主线程上的实际用户点击打开。同样,如果您在主线程上调用 window.open,它将起作用,如上所述。根据 Open a URL in a new tab (and not a new window) using JavaScript 上的这个答案如果您正在使用 Ajax 调用并希望在成功时打开窗口,则需要设置 async: false ,因为这会将所有内容都保留在主线程上。

我们无法像那样控制我们的 Ajax 调用,但出于同样的原因找到了另一个可行的解决方案。警告,它有点老套,考虑到您的限制,可能不适合您。感谢对 Open a URL in a new tab (and not a new window) using JavaScript 上不同答案的评论您在调用 setTimeout 之前打开窗口,然后在延迟函数中更新它。有几种方法可以做到这一点。要么在打开窗口时保留对窗口的引用,w = window.open... 并设置 w.location,要么使用目标 window 打开。 open('', 'target_name'),在该目标中打开的延迟函数中,window.open('your-url', 'target_name'),并依赖于浏览器保留引用。

当然,如果用户将他们的设置设置为在新窗口中打开链接,这不会改变这一点,但这对 OP 来说不是问题。

关于javascript window.open 从回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19026162/

相关文章:

javascript - getElementById 返回未定义

linux - 是否有一种异步信号安全的方式来读取 Linux 上的目录列表?

c# - 如何访问失败的 Hangfire 作业

java - 为什么 getView 方法上我的 ConvertView == null ?

c++ - 来自类方法的回调 (C++)

JavaScript 范围解析时间

javascript - 再次单击时关闭 javascript 选项卡

javascript - (JavaScript+PHP) 在没有 40 个单独事件的情况下,我如何告诉 40 个按钮每个应用于它们所在的表格行?

c++ - 如何将 std::future<T> 转换为 std::future<void>?

python - 将抽象类用于事件处理程序回调是惯用的 Python 吗?