我正在处理从按钮单击调用的一些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。
知道如何在所有现代浏览器中使用它吗?
罗布