从间隔使用window.open时防止弹出窗口阻止程序

时间:2015-02-16 23:06:04

标签: javascript asynchronous popup-blocker

我正在处理从按钮单击调用的一些js代码,启动一些可能导致需要打开的窗口的异步操作。 为了防止弹出窗口阻止程序,我需要确保通过按钮单击完成window.open调用。

我一直在玩setTimeout和setInterval来检查异步操作是否每100毫秒左右,如果需要的话打开窗口。

我在jsfiddle中模拟了这一点 通过setInterval n次调用一个函数,第n个调用调用window.open。

使用Javascript:

// in chrome this only works with n = 1, otherwise the open-call is blocked
var n = 2
var timer

function tst1() {
    console.log('tst1.start ' + n)
    if (--n == 0) {
        clearInterval(timer)
        window.open('http://google.com/', '_blank')
    }
    console.log('tst1.done')
}

function tst() {
    timer = setInterval(tst1, 1000)
}

HTML:

<button onclick="tst()">Click me</button>

问题是,这仅适用于第一次(在js代码的第一行n = 1),当n设置为2或更多时,它适用于Firefox但不适用于chrome。

知道如何在所有现代浏览器中使用它吗?

罗布

0 个答案:

没有答案