jquery Deferred savevideo

isTrusted解决方案


var evt = document.createEvent('MouseEvents');
evt.initMouseEvent("click", true, true, window,0, 634, 376, 634, 281, false, false, false, false, 0, null);
//$('.course-item .course-show:first')[0].dispatchEvent(evt);

console.log(evt.isTrusted,typeof(evt),"isTrusted");
evt.isTrusted=true;
console.log(evt.isTrusted,"isTrusted");

//$('.course-item .course-show:first')[0].dispatchEvent(evt);


//#######################################################################################
//#######################################################################################
//#######################################################################################


var defereds = [];
 
$imgs.each(function() {
  var dfd = $.Deferred();
 
  $(this).load(dfd.resolve);
  defereds.push(dfd);
});
$.when.apply(null, defereds).done(function() {
  console.log('load compeleted');
});


如上修改为
var defereds = [];

function getid(name_str) {
    return $.Deferred(function($dfd) {
        console.log($dfd,'s1');
        chrome.tabs.query({status:"complete"},function (tabs){

            for( var i in tabs){
                find = tabs[i].title.indexOf(name_str);
                if(find!=-1){
                        sleep(3000);
                        $dfd.resolve(tabs[i].id);
                        //console.log($dfd,'e4');
                        break ;
                }

            }

        });
        console.log('run immediately2');
    }).promise();
}
$.when( getid("锤子商城首页") )
.then(execscript)
.then(function(result){console.log(result)});

//此处没有延迟对象
titlelist=[];
$('.course-item').each(function(index,html){
	var title = $('.media-body a',this).text(); //相当于目录总目录
	var filename = $('.period-list li:first a span',this).text();
	var fileurl = $('.period-list li:first a',this).attr('href');  //url1
	console.log(index+1,'item');
	title = String(index+1)+title;                        //final folder name
	var videos = $('.period-list li[data-id] a',this).each(function(index,ele){
		title2 = $(this).attr('title');
		title2 = String(index+1+title2);
		videohref = $(this).attr('href');
		//console.log(index,$(this).attr('href'),$(this).attr('title'),'href','video');

	});





});


//#######################################################################################
//#######################################################################################
//#######################################################################################


reg1 = /<div class="lesson-content" id="lesson-video-content" data-key="(\S+)"[ ]*\n\r*[ ]*data-url="(\S+)"/;
$.get("http://www.ydma.com/classroom/11/task/61/course/2461/lesson/9901/learn?taskDayId=0",{},
  function(data){
	result = reg1.exec(data);
tasks.reduce(function(prev,next){…	key= result[1];
	domain= result[2];
	url=domain+'/'+key+ '/';
    console.log("result:",url);
  }),'html';


function get_video_url(url){
    return $.Deferred(function($dfd) {
		
		$.get(url,{},function(data){
		  	var reg = /<div class="lesson-content" id="lesson-video-content" data-key="(\S+)"[ ]*\n\r*[ ]*data-url="(\S+)"/;
			var result = reg.exec(data);
			var key= result[1];
			var domain= result[2];
			var urls=domain+'/'+key+ '/';
		    $dfd.resolve(urls);
		  },'html');

        //console.log('run immediately2');

    }).promise();

}



var reg = /<div class="lesson-content" id="lesson-video-content" data-key="(\S+)"[ ]*\n\r*[ ]*data-url="(\S+)"/;
$.get("https://slice.ydma.com/course/2461/lesson/9901/771/",{},
  function(data){
	result = reg1.exec(data);
	key= result[1];
	domain= result[2];
	url=domain+'/'+key+ '/';
    console.log("result:",url,data);
  }),'html';

function get_video_extm3ulist(url,domain){
    return $.Deferred(function($dfd) {
		
		//console.log(url,'url');
		$.get(url,{},function(data){
			var urls=[];
			var reg = /\/[a-zA-Z0-9\/]+/g;
			var result = data.match(reg);
			for (var i in result){
				urls[i]=domain+'/'+result[i];
		    };
		    $dfd.resolve(urls);
		},'html');

        //console.log('run immediately2');

    }).promise();

}
//正确的参数传递关系是如下
$.when(get_video_urllist("https://slice.ydma.com/course/2461/lesson/9901/771/",'asdf')).then(function(result){console.log(result,'then')});

deferred.resolve( args )返回: Deferred
描述: 解决Deferred(延迟)对象,并根据给定的args参数调用任何完成回调函数(doneCallbacks)。

添加的版本: 1.5deferred.resolve( args )
args
类型: Object
传递给完成回调函数(doneCallbacks)的可选的参数。
当延迟对象被 resolved 时,任何通过 deferred.then或deferred.done 添加的 doneCallbacks,都会被调用。回调函数的执行顺序和它们被添加的顺序是一样的。传递给 deferred.resolve() 的 args 参数,会传给每个回调函数。当延迟对象进入 resolved 状态后,再添加的任何 doneCallbacks,当它们被添加时,就会被立刻执行,并带上传入给 .resolve()的参数。有关详细信息,请参阅文件Deferred object 。





//???????????????????????????????????????????????????????????????





function get_video_extm3ulist(para){
    return $.Deferred(function($dfd) {
		
		//console.log(para,'m3u1');
		$.get(para[0],{},function(data){
			var urls=[];
			var reg = /\/[a-zA-Z0-9\/]+/g;
			result = data.match(reg);
			for (var i in result){
				urls[i]=para[1]+'/'+result[i];
		    };
			//console.log(urls,'m3u2');
		    $dfd.resolve(urls);
		},'html');

        //console.log('run immediately2');

    }).promise();

}

function get_video_url(url){
    return $.Deferred(function($dfd) {
		//console.log(url,'video1');
		$.get(url,{},function(data){
		  	var reg = /<div class="lesson-content" id="lesson-video-content" data-key="(\S+)"[ ]*\n\r*[ ]*data-url="(\S+)"/;
			var result = reg.exec(data);
			var key= result[1];
			var domain= result[2];
			var urls=domain+'/'+key+ '/';
			//console.log([urls,domain],'video2');
		    $dfd.resolve([urls,domain]);
		  },'html');

    }).promise();

}


url = [];
$('.course-item').each(function(num,html){
	url[num] = [];
	var title = $('.media-body a',this).text(); //相当于目录总目录
	var filename = $('.period-list li:first a span',this).text();
	var fileurl = $('.period-list li:first a',this).attr('href');  //url1
	console.log(num+1,'item');
	title = String(num+1)+title;                        //final folder name
	url[num][0]=[title,filename,fileurl];
	$('.period-list li[data-id] a',this).each(function(index,ele){
		var title2 = $(this).attr('title');
		title2 = String(index+1+title2);
		videohref = $(this).attr('href');
		url[num][index+1]=[title,title2];
		//console.log(index,$(this).attr('href'),$(this).attr('title'),'href','video');
		$.when(get_video_url(videohref))
		.then(function(urls2){return get_video_extm3ulist(urls2)})
		.then(function(urlss){url[num][index+1][2]=[urlss];});

	});
});

function get_video_extm3ulist(para){
    return $.Deferred(function($dfd) {
		
		console.log(para,'m3u1');
		$.get(para[0],{},function(data){
			var urls=[];
			var reg = /\/[a-zA-Z0-9\/]+/g;
			result = data.match(reg);
			for (var i in result){
				urls[i]=para[1]+'/'+result[i];
		    };
			console.log(urls,'m3u2');
		    $dfd.resolve(urls);
		},'html');

        //console.log('run immediately2');

    }).promise();

}

function get_video_url(url){
    return $.Deferred(function($dfd) {
		console.log(url,'video1');
		$.get(url,{},function(data){
		  	var reg = /<div class="lesson-content" id="lesson-video-content" data-key="(\S+)"[ ]*\n\r*[ ]*data-url="(\S+)"/;
			var result = reg.exec(data);
			var key= result[1];
			var domain= result[2];
			var urls=domain+'/'+key+ '/';
			console.log([urls,domain],'video2');
		    $dfd.resolve([urls,domain]);
		  },'html');

    }).promise();

}

url = [];
$('.course-item').each(function(num,html){
	url[num] = [];
	var title = $('.media-body a',this).text(); //相当于目录总目录
	var filename = $('.period-list li:first a span',this).text();
	var fileurl = $('.period-list li:first a',this).attr('href');  //url1
	console.log(num+1,'item');
	title = String(num+1)+title;                        //final folder name
	url[num][0]=[title,filename,fileurl];
	$('.period-list li[data-id] a',this).each(function(index,ele){
		var title2 = $(this).attr('title');
		title2 = String(index+1+title2);
		videohref = $(this).attr('href');
		url[num][index+1]=[title,title2];
		//console.log(index,$(this).attr('href'),$(this).attr('title'),'href','video');
		$.when(get_video_url(videohref))
		.then(function(urls2){return get_video_extm3ulist(urls2)})
		.then(function(urlss){url[num][index+1][2]=[urlss];});

	});
});
//下载第二页视频
url = [];
$('.course-item').each(function(num,html){
	console.log($(this).children('ul'),num,'ul')
	url[num] = [];
	var title = $('.media-body a',this).text(); //相当于目录总目录
	if ($('.period-list li:first a .period-state',this).text()=='下载课件'){
        var filename = $('.period-list li:first a .title',this).text();
        var fileurl = $('.period-list li:first a',this).attr('href');  //url1
        console.log(num+1,'item');
        title = String(num+1)+title;                        //final folder name
        url[num][0]=[title,filename,fileurl];
    }else{
		url[num][0]=[]
	}
	$('.period-list li[data-id] a',this).each(function(index,ele){
		var title2 = $(this).attr('title');
		title2 = String(index+1+title2);
		videohref = $(this).attr('href');
		url[num][index+1]=[title,title2];
		//console.log(index,$(this).attr('href'),$(this).attr('title'),'href','video');
		$.when(get_video_url(videohref))
		.then(function(urls2){return get_video_extm3ulist(urls2)})
		.then(function(urlss){url[num][index+1][2]=urlss;});

	});
});
url = url.slice(0,-1)
//删除最后一个数组元素
$.when(get_video_url("http://www.ydma.com/classroom/11/task/61/course/2451/lesson/9851/learn?taskDayId=0"))
.then(function(urls2){return get_video_extm3ulist(urls2)})
.then(function(urlss){console.log(urlss,'urllistreturn');});


listurl = listurl2.slice(5);
for(var i in listurl){
	if (i<6){
        for(var j in listurl[i]){
            if(j==0){
				if(listurl[i][j].length != 0){   //加了不为空的判断 []==[]居然为false,想不通
                    url=listurl[i][j][2];

                    name='./课件/'+listurl[i][j][1].replace(/^\s*|\s*$/g,"")+'.zip';
                    console.log(i,j,url,name,'file');
                    chrome.downloads.download({url:url,filename:name},function(id){});
                }		

            }else{
                arr = listurl[i][j][2];
                for ( var k in arr){
                    url=arr[k];
                    filename = arr[k].match(/http.*\/([^\/]+)/);
					console.log(filename,'filename---------------------------------');
                    name='./'+listurl[i][j][0].replace(/^\s*|\s*$/g,"")+'/'+listurl[i][j][1].replace(/^\s*|\s*$/g,"")+'/'+filename[1];
                    console.log(i,j,k,url,name,'video');
                    chrome.downloads.download({url:url,filename:name},function(id){});	

                }


            }
        }
	}

}

imglist=[];
$('#content_views p img').each(function(index,ele){
	var url=$(this).attr('src');
	var name=$(this).attr('alt')+'.jpg';
	imglist[index]=[$(this).attr('alt'),$(this).attr('src')];
	//chrome.downloads.download({url:url,filename:name},function(id){});
});
JSON.stringify(imglist)

arr = JSON.parse('[["1","https://img-blog.csdnimg.cn/20190823012118320.jpg"],["2","https://img-blog.csdnimg.cn/20190823012154984.jpg"],["3","https://img-blog.csdnimg.cn/20190823012241732.jpg"],["4","https://img-blog.csdnimg.cn/20190823012257571.jpg"],["5","https://img-blog.csdnimg.cn/20190823012315266.jpg"],["6","https://img-blog.csdnimg.cn/20190823012333916.jpg"],["7","https://img-blog.csdnimg.cn/20190823012351508.jpg"],["8","https://img-blog.csdnimg.cn/20190823012406900.jpg"],["9","https://img-blog.csdnimg.cn/20190823012427675.jpg"],["10","https://img-blog.csdnimg.cn/20190823012440982.jpg"],["11","https://img-blog.csdnimg.cn/2019082301251972.jpg"],["12","https://img-blog.csdnimg.cn/20190823012538583.jpg"],["13","https://img-blog.csdnimg.cn/20190823012552148.jpg"],["14","https://img-blog.csdnimg.cn/20190823012606298.jpg"],["15","https://img-blog.csdnimg.cn/20190823012620711.jpg"],["16","https://img-blog.csdnimg.cn/20190823012654105.jpg"],["17","https://img-blog.csdnimg.cn/20190823012721263.jpg"],["18","https://img-blog.csdnimg.cn/20190823012738311.jpg"],["19","https://img-blog.csdnimg.cn/20190823012752808.jpg"]]')

for (var i in arr){
	url=arr[i][1];
	name=arr[i][0];
	chrome.downloads.download({url:url,filename:name},function(id){});
}


for (var i=0;i<1036;i++){
	url='https://v5.weizan.cn/262845/132110276476927034/68225097201_'+String(i)+'.ts';
	name='./从0到1带你读懂数据分析/'+String(i);
	//console.log(i,url,name);
	chrome.downloads.download({url:url,filename:name},function(id){
		chrome.downloads.search({id:id}, function(item){
			console.log(i,id,item);			
		})

	});
}

		chrome.downloads.erase({}, function(item){
			
			for (var i in item){
                console.log(i,item[i]);
				//chrome.downloads.resume
                //chrome.downloads.cancel(item[i].id,function(){console.log('ok');});
            }
			console.log(item,'item');	
		})

chrome.downloads.onChanged.addListener(function(delta){
	if(delta.state=='interrupted'){

		console.log(delta.url,delta.id,delta.filename,delta,'change')
    }

});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery 中的 Deferred 对象提供了一种优雅的方式来处理异步操作,它可以让我们更方便地控制异步操作的状态和执行顺序。下面是 Deferred 对象的常用方法: 1. $.Deferred():创建一个 Deferred 对象。 2. deferred.done():当 Deferred 对象的状态变为已完成时,调用该方法注册的回调函数。 3. deferred.fail():当 Deferred 对象的状态变为已失败时,调用该方法注册的回调函数。 4. deferred.always():无论 Deferred 对象的状态是已完成还是已失败,都调用该方法注册的回调函数。 5. deferred.then():当 Deferred 对象的状态变化时,调用该方法注册的回调函数。它可以接受两个参数,第一个参数是已完成状态的回调函数,第二个参数是已失败状态的回调函数。 6. deferred.promise():返回一个 Promise 对象,该对象可以被传递给其他函数或者方法,但只能调用 then()、catch() 和 finally() 方法,不能改变 Deferred 对象的状态。 下面是一个使用 Deferred 对象的示例代码: ```javascript function asyncAction() { var defer = $.Deferred(); setTimeout(function() { defer.resolve("Async Action Completed!"); }, 2000); return defer.promise(); } var promise = asyncAction(); promise.then(function(data) { console.log(data); }).fail(function() { console.log("Async Action Failed!"); }).always(function() { console.log("Async Action Done!"); }); ``` 在这个例子中,我们定义了一个 asyncAction() 函数,它返回一个 Deferred 对象。在该函数内部,我们使用 setTimeout() 函数模拟一个异步操作,并在两秒后调用 resolve() 方法,将 Deferred 对象的状态设置为已完成。然后我们使用 promise 变量保存该 Deferred 对象的 Promise 对象,并使用 then()、fail() 和 always() 方法注册回调函数。在 then() 方法中,输出异步操作完成的信息;在 fail() 方法中,输出异步操作失败的信息;在 always() 方法中,输出异步操作完成的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值