javascript - 使用 javascript 按保证顺序打开窗口

标签 javascript jquery

我有 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>

最佳答案

好吧,我明白了。无法查看远程 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>

然后,在 tst2.jsp 中,如下所示:

<script>
opener.document.getElementById("urls" + <%=request.getParameter("i")%>).checked = true;
// console.log("Set variable");
window.location = '<%= request.getParameter("url") %>';
</script>

另外,请注意,您可以打开的窗口数量取决于浏览器。 Firefox 可以配置成任何东西。看来 Chrome 仅限于 20 个。我不确定 IE 是否如此。

关于javascript - 使用 javascript 按保证顺序打开窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14470232/

相关文章:

javascript - 如何查看浏览器是否安装了macromedia flash player?

javascript - Wordpress jQuery 单击不工作。请帮助 :)

javascript - vue-router - 使用新导航从 "/"取消到 "/password"的导航

javascript - 简单的待办事项列表不起作用

javascript - jQuery-File-Upload - 仅显示以特定文件名开头的文件

javascript - 在 SweetAlert Box 文本属性上设置不带引号的字符串

javascript - 在 JavaScript 中创建元素

javascript - 为什么 regex 或 .replace() 不使用 CKEditor 和 Javascript 替换脚本中的字符串?

javascript - querySelector 在没有 jQuery 的情况下选择最近的祖先

javascript - 检查 jquery 函数名称是否唯一(和 html id)