HHHz 2013-04-21 01:21
浏览 248
已采纳

[新手]一个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;
}

执行后

  • 写回答

2条回答 默认 最新

  • jinnianshilongnian 2013-04-21 08:27
    关注

    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>

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?