我有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>
答案 0 :(得分:1)
好的,我明白了。无法看到远程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。
答案 1 :(得分:0)
您可能打开的窗口数量有限,可能会在多次调用后重复使用。
open()
应该是一个阻塞调用,因此它总是等到浏览器至少打开一个新窗口,然后再转到下一个窗口。
您可以尝试添加随机参数作为第二个参数进行打开,以便在浏览器被分配默认名称时避免重复使用Windows。
// 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() );