[新手]一个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); // =0function myload(){count+=1;}执行后

解决方案

1、跨域问题:假设你的域名是a.com 你open b.com 然后绑定onload 这是不允许的 跨域禁止2、不能简单的打开文件 直接测试 必须放到服务器上测试 3、解决方案 3.1、setTimeout 不可靠setTimeout(function(){ alert(count); }, 1000);3.2、还是setTimeout 但判断打开的总数 和 load的总数<a target="_blank" href="object.html">超链接</a><a target="_blank" href="object.html">超链接2</a><a target="_blank" href="object2.html">超链接3</a> <script type="text/javascript"> var mylinks = document.getElementsByTagName("a"); var patt1=new RegExp("object.html"); var needOpens = []; for (i=0; i<=mylinks.length; ++i) { var href = mylinks[i]? mylinks[i].getAttribute("href") : ""; if(patt1.exec(href)) { needOpens.push(href); //1、找到要打开的url } } 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 == 打开的数量</script>
解决方案二:
我只谈顺序执行的问题,解决办法就是用递归回调。让打开后的窗体,回来调用相同函数,继续下一个。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);//开始。未测试,仅供参考。

时间: 2024-08-03 12:16:19

[新手]一个javascript同步的问题的相关文章

《JavaScript和jQuery实战手册(原书第3版)》---第1章 编写第一个JavaScript程序 1.1 编程简介

本节书摘来自华章出版社<JavaScript和jQuery实战手册(原书第3版)>一书中的第1章,第1.1节,作者David Sawyer McFarland,姚待艳 李占宣 译,更多章节内容可以访问"华章计算机"公众号查看. 第1章 编写第一个JavaScript程序 HTML自身并没有太多智能:它不能做数学运算,不能判断某人是否正确填写了一个表单,而且不能根据Web访问者的交互来做出判断.基本上,HTML让人们阅读文本.观看图片或视频,并且单击链接转向拥有更多文本.图片

《JavaScript和jQuery实战手册(原书第2版)》——1.3节第一个JavaScript程序

1.3 第一个JavaScript程序 学习JavaScript的最佳方式是进行实际的编程.在本书中,你将会看到很多动手实践的教程,它们带领你一步一步地经过创建JavaScript程序的过程.要开始练习教程,我们需要一个文本编辑器(参见前言的"用于JavaScript编程的软件"部分的介绍).一个Web浏览器以及位于www.sawmac.com/js2e的练习文件(参见下面的"注意"部分的完整说明). 注意: 本章的教程需要本书Web站点www. sawmac.co

一个JavaScript操作元素定位元素的实例

 操作元素定位元素,用js来实现是个不错的选择,下面有个示例,需要的朋友可以看看 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 <!DOCTYPE html>  <h

一个JavaScript获取元素当前高度的实例

 <!DOCTYPE html>  <html>  <head>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  <title>每天一个JavaScript实例-获取元素当前高度</title>  <style>  #date{width:90%;height:25%;padding:10

一个JavaScript递归实现反转数组字符串的实例

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <!DOCTYPE html>  <html>  <head>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  <title>每天一个JavaScript实例-递归实

一个JavaScript用逗号分割字符串实例

  //用逗号隔开字符串成数组打印.  <!doctype html>  <html lang="en">  <head>  <meta charset="utf-8">  <title>每天一个JavaScript实例-分割字符串</title>  <script>  window.onload = function(){  var keywordList = prompt(&qu

一个JavaScript处理textarea中的字符成每一行实例

 <!doctype html>  <html lang="en">    <head>    <meta charset="utf-8">    <title>每天一个JavaScript实例-处理textarea中的字符成每一行</title>    <script>                function clicka(){          console.log(&

怎样在不使用框架的基础上开发一个 Javascript 组件

本文讲的是怎样在不使用框架的基础上开发一个 Javascript 组件, 许多开发者(包括我)犯的一个错误是当遇到问题时他们总是自上而下地考虑问题.他们想问题的时候,总是从考虑框架(Framework),插件(Plugin),预处理器(Pre-processors),后处理器(Post-processors),面向对象模式(objected-oriented patterns)等等这些方面出发,他们也可能会从他们以前看过的一篇文章来考虑.而这时如果有一个生成器(Generator)的话,他们当然

一个JavaScript的求爱小特效_javascript技巧

这里面做了一个JavaScript的求爱小特效,效果如下: 不仅能出现下面的图的效果,还可以让这个图形跟随着鼠标转动哦,这里面只是一个简单的没有修饰的小例子,基于这个例子可以让求爱,更加好玩了.闷骚男们,是不是可以给你的小萝莉发个这样的网页啊.给力的. 贴上code吧: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert t