以保证的顺序使用javascript打开窗口

以保证的顺序使用javascript打开窗口,javascript,jquery,Javascript,Jquery,我有javascript,可以在自己的窗口中打开URL列表。我可以对每个窗口使用window.open,但问题是,有时浏览器并不总是按照我要求的顺序打开窗口,特别是当有大量URL时。URL不在我的域中,因此我无法等待来自子项的onLoad事件。在我打开下一个窗口之前,有没有办法确定子窗口是否已打开?作为最后的手段,我想我可以在每次打开之间创建一个等待时间,但这更像是一个黑客,减慢了一切,虽然可能会使正确的顺序更有可能,但不能保证它。例如: <script type='text/javasc

我有javascript,可以在自己的窗口中打开URL列表。我可以对每个窗口使用window.open,但问题是,有时浏览器并不总是按照我要求的顺序打开窗口,特别是当有大量URL时。URL不在我的域中,因此我无法等待来自子项的onLoad事件。在我打开下一个窗口之前,有没有办法确定子窗口是否已打开?作为最后的手段,我想我可以在每次打开之间创建一个等待时间,但这更像是一个黑客,减慢了一切,虽然可能会使正确的顺序更有可能,但不能保证它。例如:

<script type='text/javascript'>
var urls = new Array();
urls[0] = 'http://www.yahoo.com';
urls[1] = 'http://www.google.com';
urls[2] = 'http://www.facebook.com';

$(document).ready(function() {
    for (i=0; i<urls.length; i++) {
        window.open(urls[i]);
    }
});
</script>

var url=新数组();
URL[0]='http://www.yahoo.com';
URL[1]='http://www.google.com';
URL[2]='http://www.facebook.com';
$(文档).ready(函数(){

对于(i=0;i您可以打开的窗口数量可能有限,它们可能在多次调用后被重用

open()

您可以尝试添加一个随机参数作为要打开的第二个参数,以避免浏览器在为窗口指定默认名称时重复使用这些窗口

// No guarantee that the name generated is unique, but if that's your only problem
// you should be OK
window.open(urls[i], "name" + new Date() + Math.random() );

您可以打开的窗口数量可能有限,在多次调用后可能会重新使用这些窗口

open()

您可以尝试添加一个随机参数作为要打开的第二个参数,以避免浏览器在为窗口指定默认名称时重复使用这些窗口

// No guarantee that the name generated is unique, but if that's your only problem
// you should be OK
window.open(urls[i], "name" + new Date() + Math.random() );

好的,我知道了。没有办法在远程URL中看到子窗口是否打开。这是真的。但是,如果你在域中打开一个文件,唯一的任务就是通知父窗口已打开,然后重定向到远程URL,这样做是行得通的。类似这样的情况:

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type='text/javascript'>
var urls = new Array();
urls[0] = 'http://www.yahoo.com';
urls[1] = 'http://www.google.com';
urls[2] = 'http://www.facebook.com';
urls[3] = 'http://www.linkedin.com';
urls[4] = 'http://www.twitter.com';
$(document).ready(function() {
    var interval = null;
    function doNext(i) {
        if (i < urls.length) {
            // console.log("Doing: " + i);
            childWin = window.open('tst2.jsp?i=' + i + '&url=' + urls[i]);
            interval = setInterval(function() {waitForIt(i);}, 1000);
            waitForIt(i);
        }
    }

    function waitForIt(i) {
        if (document.getElementById("urls" + i).checked == false) {
            // console.log('wait for: ' + i);
        } else {
            clearInterval(interval);
            if (i < urls.length) {
                doNext(i+1);
            }
        }
    }

    doNext(0);
});
</script>
<input type="checkbox" id="urls0">http://www.yahoo.com<br>
<input type="checkbox" id="urls1">http://www.google.com<br>
<input type="checkbox" id="urls2">http://www.facebook.com<br>
<input type="checkbox" id="urls3">http://www.linkedin.com<br>
<input type="checkbox" id="urls4">http://www.twitter.com<br>
<script>
opener.document.getElementById("urls" + <%=request.getParameter("i")%>).checked = true;
// console.log("Set variable");
window.location = '<%= request.getParameter("url") %>';
</script>

var url=新数组();
URL[0]='http://www.yahoo.com';
URL[1]='http://www.google.com';
URL[2]='http://www.facebook.com';
网址[3]='http://www.linkedin.com';
URL[4]='http://www.twitter.com';
$(文档).ready(函数(){
var区间=null;
函数doNext(i){
if(i
http://www.google.com
http://www.facebook.com
http://www.linkedin.com
http://www.twitter.com
然后,在tst2.jsp中,类似以下内容:

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type='text/javascript'>
var urls = new Array();
urls[0] = 'http://www.yahoo.com';
urls[1] = 'http://www.google.com';
urls[2] = 'http://www.facebook.com';
urls[3] = 'http://www.linkedin.com';
urls[4] = 'http://www.twitter.com';
$(document).ready(function() {
    var interval = null;
    function doNext(i) {
        if (i < urls.length) {
            // console.log("Doing: " + i);
            childWin = window.open('tst2.jsp?i=' + i + '&url=' + urls[i]);
            interval = setInterval(function() {waitForIt(i);}, 1000);
            waitForIt(i);
        }
    }

    function waitForIt(i) {
        if (document.getElementById("urls" + i).checked == false) {
            // console.log('wait for: ' + i);
        } else {
            clearInterval(interval);
            if (i < urls.length) {
                doNext(i+1);
            }
        }
    }

    doNext(0);
});
</script>
<input type="checkbox" id="urls0">http://www.yahoo.com<br>
<input type="checkbox" id="urls1">http://www.google.com<br>
<input type="checkbox" id="urls2">http://www.facebook.com<br>
<input type="checkbox" id="urls3">http://www.linkedin.com<br>
<input type="checkbox" id="urls4">http://www.twitter.com<br>
<script>
opener.document.getElementById("urls" + <%=request.getParameter("i")%>).checked = true;
// console.log("Set variable");
window.location = '<%= request.getParameter("url") %>';
</script>

opener.document.getElementById(“URL”+).checked=true;
//log(“设置变量”);
window.location='';

另外,需要注意的是,您可以打开的窗口数量取决于浏览器。Firefox可以配置为任何类型。看起来Chrome限制为20个。我不确定IE。

好的,我想出来了。在远程URL中看不到子窗口是打开的。这是真的。但是,如果您在域中打开一个文件,唯一的工作就是提醒家长它已打开,然后重定向到远程URL,这样做有效。类似如下:

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type='text/javascript'>
var urls = new Array();
urls[0] = 'http://www.yahoo.com';
urls[1] = 'http://www.google.com';
urls[2] = 'http://www.facebook.com';
urls[3] = 'http://www.linkedin.com';
urls[4] = 'http://www.twitter.com';
$(document).ready(function() {
    var interval = null;
    function doNext(i) {
        if (i < urls.length) {
            // console.log("Doing: " + i);
            childWin = window.open('tst2.jsp?i=' + i + '&url=' + urls[i]);
            interval = setInterval(function() {waitForIt(i);}, 1000);
            waitForIt(i);
        }
    }

    function waitForIt(i) {
        if (document.getElementById("urls" + i).checked == false) {
            // console.log('wait for: ' + i);
        } else {
            clearInterval(interval);
            if (i < urls.length) {
                doNext(i+1);
            }
        }
    }

    doNext(0);
});
</script>
<input type="checkbox" id="urls0">http://www.yahoo.com<br>
<input type="checkbox" id="urls1">http://www.google.com<br>
<input type="checkbox" id="urls2">http://www.facebook.com<br>
<input type="checkbox" id="urls3">http://www.linkedin.com<br>
<input type="checkbox" id="urls4">http://www.twitter.com<br>
<script>
opener.document.getElementById("urls" + <%=request.getParameter("i")%>).checked = true;
// console.log("Set variable");
window.location = '<%= request.getParameter("url") %>';
</script>

var url=新数组();
URL[0]='http://www.yahoo.com';
URL[1]='http://www.google.com';
URL[2]='http://www.facebook.com';
网址[3]='http://www.linkedin.com';
URL[4]='http://www.twitter.com';
$(文档).ready(函数(){
var区间=null;
函数doNext(i){
if(i
http://www.google.com
http://www.facebook.com
http://www.linkedin.com
http://www.twitter.com
然后,在tst2.jsp中,类似以下内容:

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type='text/javascript'>
var urls = new Array();
urls[0] = 'http://www.yahoo.com';
urls[1] = 'http://www.google.com';
urls[2] = 'http://www.facebook.com';
urls[3] = 'http://www.linkedin.com';
urls[4] = 'http://www.twitter.com';
$(document).ready(function() {
    var interval = null;
    function doNext(i) {
        if (i < urls.length) {
            // console.log("Doing: " + i);
            childWin = window.open('tst2.jsp?i=' + i + '&url=' + urls[i]);
            interval = setInterval(function() {waitForIt(i);}, 1000);
            waitForIt(i);
        }
    }

    function waitForIt(i) {
        if (document.getElementById("urls" + i).checked == false) {
            // console.log('wait for: ' + i);
        } else {
            clearInterval(interval);
            if (i < urls.length) {
                doNext(i+1);
            }
        }
    }

    doNext(0);
});
</script>
<input type="checkbox" id="urls0">http://www.yahoo.com<br>
<input type="checkbox" id="urls1">http://www.google.com<br>
<input type="checkbox" id="urls2">http://www.facebook.com<br>
<input type="checkbox" id="urls3">http://www.linkedin.com<br>
<input type="checkbox" id="urls4">http://www.twitter.com<br>
<script>
opener.document.getElementById("urls" + <%=request.getParameter("i")%>).checked = true;
// console.log("Set variable");
window.location = '<%= request.getParameter("url") %>';
</script>

opener.document.getElementById(“URL”+).checked=true;
//log(“设置变量”);
window.location='';

另外,请注意,您可以打开的窗口数量取决于浏览器。Firefox可以配置为任何类型。看起来Chrome限制为20。我不确定IE。

我很好奇您是否打开了
var dummy=window.open(URL[I])
如果它会迫使浏览器等待窗口打开。我无法忍受网站弹出一堆窗口,你如何防止浏览器的弹出阻止程序阻止你的窗口?我无法忍受我去kayak,他们弹出所有窗口,所以我不再使用kayak。嗯,chrome只允许kayak打开一个窗口…我的建议n将是连锁活动。但你到底为什么要这么做,这远远超出了我的理解,但我又一次遇到了一些愚蠢的平面设计师和项目经理,他们要求提供一些奇怪或陌生的东西,这是为内部客户提供的。他们收到了一系列来自抱怨者的URL,他们需要看看这些网站是否合作ntain包含令人不快的内容。打开超过25个窗口并不少见。据我所知,浏览器可以打开任意多个窗口,但我并不总是这样