[新手]一个javascript同步的问题

在百度首页上执行这段代码,会打开2个网页,但是跟我想的不同——
alert(count)这句执行后count=0,而且myload不是顺序执行的,好像是多线程并行的。我想问问有没有办法让循环里的myload顺序执行?

var count=0;
var patt1=new RegExp("baidu.com/[c-dz]+");
for (i=0; i<=document.links.length; ++i)
{
if(patt1.exec(document.links[i]))
{
var newwin = window.open(document.links[i]);
newwin.onload = myload;
}
}

alert(count); // =0

function myload(){
count+=1;
}

执行后

1、跨域问题:
假设你的域名是a.com 你open b.com 然后绑定onload 这是不允许的 跨域禁止

2、不能简单的打开文件 直接测试 必须放到服务器上测试

3、解决方案
3.1、setTimeout 不可靠
setTimeout(function(){ alert(count); }, 1000);

3.2、还是setTimeout 但判断打开的总数 和 load的总数

超链接
超链接2
超链接3

<br> var mylinks = document.getElementsByTagName(&quot;a&quot;);<br> var patt1=new RegExp(&quot;object.html&quot;); <br> var needOpens = [];<br> for (i=0; i&lt;=mylinks.length; ++i) <br> { <br> var href = mylinks[i]? mylinks[i].getAttribute(&quot;href&quot;) : &quot;&quot;;<br> if(patt1.exec(href)) <br> { <br> needOpens.push(href); //1、找到要打开的url<br> } <br> }</p> <pre><code>var count=0; var loadCount = 0; function myload(){ count+=1; loadCount++; conosle.info(loadCount); conosle.info(count); } for(var index in needOpens) { var href = needOpens[index]; var newwin = window.open(href); newwin.onload = myload; //2、打开 注册函数 } var t = setInterval(function() { if(loadCount == needOpens.length) { console.info(count); clearInterval(t); } }, 100); //3、每100毫秒 检测下onload执行完成没 即loadCount == 打开的数量 </code></pre> <p>

我只谈顺序执行的问题,解决办法就是用递归回调。

让打开后的窗体,回来调用相同函数,继续下一个。

[code="js"]
var count = 0;
var patt1 = new RegExp("baidu.com/[c-dz]+");

var links = document.links;
var l = links.length;

function myload(i) {

if (i >= l) {//如果已经是最后,中断。
    alert(count);
    return;
}

if (patt1.exec(links[i])) {//如果需要打开。
    var newwin = window.open(links[i]);
    newwin.onload = new function() {
        count++;
        myload(++i);
    };
} else {
    myload(++i);
}

}

myload(0);//开始。
[/code]

未测试,仅供参考。