分享你我的心得.
共乘一片美好网络.

MyHTML Player release v1.1

把下面的代码copy到本地,另存为hta文件使用 

特点:自动获取baidu歌曲top500并link 

使用ajax技术,自动分页 

注意:代码中使用了ADODB.Stream对象,可能被杀毒软件判断为恶意。 

运行代码框 
<html> 
<head> 
<title>My HTML Player – By Hutia</title> 
<hta:application id="app1" singleinstance="yes" contextmenu="yes" 
 sysmenu="yes" windowstate="normal" maximizeButton="no" minimizeButton="yes" 
 applicationName="MyHTMLPlayer" version="1.1" innerBorder="no" 
 caption="yes" showintaskbar="yes" border="thin" /> 
<meta http-equiv="content-type" content="text/html; charset="gb2312"> 
<style> 
body { 
    overflow:auto; 
    font-size:12px; 
    cursor:default; 
    padding:3px; 
    margin:0px; 
    border-width:0px; 

#f1 { 
    display:none; 

#table01 { 
    font-size:12px; 
    background-Color:black; 
    color:white; 
    text-align:center; 
    float:left; 
    height:300px; 

#table01 td{ 
    vertical-align:top; 

#MediaPlayer1 { 
    width:300px; 
    height:300px; 

#playListTitle { 
    background-Color:#001122; 
    color:white; 
    font-size:12px; 
    font-weight:bold; 
    width:100%; 
    height:16px; 
    padding:2px; 

#playList { 
    width:150px; 
    height:280; 
    margin:0px; 
    font-size:12px; 
    background-Color:black; 
    color:white; 

#musicList { 
    width:260px; 
    border:buttonface 4px groove; 
    height:200px; 
    float:right; 

#musicListTitle { 
    font-size:13px; 
    width:100%; 
    height:20px; 
    background-Color:#C5FFC5; 
    padding:3px; 
    font-weight:bold; 

#musicListContent { 
    height:200px; 

#musicList .item { 
    width:100%; 
    height:20px; 
    line-height:12px; 
    padding:0px; 
    margin:0px; 
    overflow-y:hidden; 

#musicList .item a { 
    color:#773; 
    text-decoration:none; 
    width:180px; 
    height:20px; 
    line-height:12px; 
    padding-top:5px; 
    padding-left:10px; 
    margin:0px; 
    position:relative; 
    overflow:hidden; 
    text-overflow:ellipsis; 

#musicListNav { 
    height:18px; 

#processBar { 
    position:absolute; 
    width:99%; 
    height:30px; 
    border:buttonface 2px inset; 
    z-Index:99; 
    background-Color:#FFF; 
    bottom:5px; 
    left:5px; 
    padding:5px; 

.add2ListBtn { 
    width:18px; 
    line-height:14px; 
    text-align:center; 
    cursor:hand; 
    font-size:14px; 
    font-family:Webdings; 

.add2ListBtn2 { 
    width:18px; 
    line-height:14px; 
    text-align:center; 
    cursor:hand; 
    font-size:14px; 

</style> 
<script> 

//****全局变量定义区************ 
taskState="loadList"; 
url="http://list.mp3.baidu.com/topso/mp3topsong.html"; 
taskURLs=new Array(); 
taskNames=new Array(); 
pageSize=10; 
pageNo=0; 
currentTask=pageNo*pageSize; 
maxTask=currentTask+pageSize; 
windowWidth=740; 
windowHeight=400; 

//****初始化组件*************** 
try{ 
    var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
}catch(e){ 
    document.write("<h3>加载失败,组件被禁止</h3>"); 

try{ 
    top.moveTo((screen.availWidth-windowWidth)/2,(screen.availHeight-windowHeight)/2); 
    top.resizeTo(windowWidth,windowHeight); 
}catch(e){} 

//****过程函数区*************** 
//—初始化——- 
function init(){ 
    MediaPlayer1.AutoRewind=false; 
    MediaPlayer1.AutoStart=true; 
    MediaPlayer1.SendPlayStateChangeEvents=true; 
    MediaPlayer1.attachEvent("PlayStateChange",checkPlayStatus); 
    initLoadMusic(); 

//####关于baidu音乐获取的代码###### 
//—初始化下载—– 
function initLoadMusic(){ 
    currentTask=pageNo*pageSize-1; 
    maxTask=currentTask+pageSize; 
    musicListContent.innerHTML=""; 
    processBar.style.display=""; 
    loadBaiduMusic(); 

//—开始从baidu下载音乐—– 
function loadBaiduMusic(){ 
    //如果状态是loadMusic那么从url列表取下载地址 
    if(taskState=="loadMusic"){ 
        currentTask++; 
        if(currentTask>maxTask||currentTask>taskURLs.length-1){ 
            //下载完成 
            try{clearTimeout(vbTimer);}catch(e){} 
            processBar.style.display="none"; 
            createNavigate(); 
            return(false); 
        } 
        if(currentTask>taskURLs.length-1){ 
            currentTask–; 
            setTimeout(loadBaiduMusic,1000); 
            return(false); 
        } 
        url=taskURLs[currentTask]; 
    } 
    xmlHttp.open("GET",url,true); 
    xmlHttp.send(); 
    xmlHttp.onreadystatechange=checkXMLHttpState; 
    checkXMLHttpState(); 

//—-处理下载—– 
function checkXMLHttpState(){ 
    if (xmlHttp.readyState==4){ 
        if (xmlHttp.status==200){ 
            if(taskState=="loadList"){ 
                taskState="loadMusic"; 
                //分析下载内容生成歌曲地址列表 
                analyBaiduList(); 
                currentTask=-1; 
            }else{ 
                //获得mp3的真实地址 
                analyBaiduMusic(); 
            } 
        } 
        loadBaiduMusic(); 
    } 

//—-分析下载内容生成歌曲地址列表—- 
function analyBaiduList(){ 
    var strHTML=b2s(xmlHttp.responseBody); 
    var iStart=strHTML.search(/<body/i); 
    var iEnd=strHTML.toLowerCase().indexOf("<\/script",iStart+5); 
    strHTML=strHTML.substring(iStart,iEnd); 
    var fff=document.createElement("Iframe"); 
    fff.id="tempFrame"; 
    fff.style.display="none"; 
    document.body.insertBefore(fff); 
    theWin=eval("tempFrame"); 
    theWin.document.open(); 
    theWin.document.clear(); 
    theWin.document.write(strHTML); 
    theWin.document.close(); 
     
    for(var i=0;i<theWin.document.links.length;i++){ 
        if(theWin.document.links[i].href.match(/mp3.baidu.com\/m\?tn=baidump3\&ct=/i)&&theWin.document.links[i].parentNode.firstChild==theWin.document.links[i]){ 
            //将url存入taskURLs,歌曲名称存入taskNames 
            taskURLs[taskURLs.length]=theWin.document.links[i].href.replace(/lm=-1/,"lm=0"); 
            taskNames[taskNames.length]=theWin.document.links[i].innerText; 
        } 
    } 
    fff.outerHTML=""; 

//—-获得mp3的真实地址,添加到music list—– 
function analyBaiduMusic(){ 
    var strHTML=b2s(xmlHttp.responseBody); 
    var strTxt=taskNames[currentTask]; 
    //匹配URL的正则 
    var aryURL=strHTML.match(/  http:\/\/[^ ]+  /gi); 
    if(!aryURL){return(false);} 
    var theC=document.createElement("DIV"); 
    theC.className="item"; 
    musicListContent.insertBefore(theC); 
    //获取10个地址以免链接失效 
    for(var i=0;i<10&&i<aryURL.length;i++){ 
        //每个item的容器 
        var theD=document.createElement("DIV"); 
        theD.onmouseover=musicList_mouseover; 
        theD.onmouseout=musicList_mouseout; 
        //link元素 
        var theLink=document.createElement("A"); 
        var strURL=aryURL[i].substring(2,aryURL[i].length-2); 
        theLink.href=strURL; 
        theLink.title=strURL; 
        theLink.innerText=(currentTask+1)+"."+strTxt; 
        if(i>0){theLink.innerText+="."+(i+1);} 
        theLink.onclick=musicList_item_click; 
        theD.insertBefore(theLink); 
        //添加到列表按钮 
        theButton=document.createElement("Span"); 
        theButton.className="add2ListBtn"; 
        theButton.innerText="1"; 
        theButton.title="添加到列表"; 
        theButton.onclick=musicList_add2ListBtn_click; 
        theButton.onmouseover=musicList_item_mouseover; 
        theButton.onmouseout=musicList_item_mouseout; 
        theD.insertBefore(theButton); 
        //上卷按钮 
        theButton=document.createElement("Span"); 
        theButton.className="add2ListBtn"; 
        theButton.innerText="3"; 
        theButton.title="上卷"; 
        theButton.onclick=musicList_scrollUpBtn_click; 
        theButton.onmouseover=musicList_item_mouseover; 
        theButton.onmouseout=musicList_item_mouseout; 
        theD.insertBefore(theButton); 
        //下卷按钮 
        theButton=document.createElement("Span"); 
        theButton.className="add2ListBtn"; 
        theButton.innerText="4"; 
        theButton.title="下卷"; 
        theButton.onclick=musicList_scrollDownBtn_click; 
        theButton.onmouseover=musicList_item_mouseover; 
        theButton.onmouseout=musicList_item_mouseout; 
        theD.insertBefore(theButton); 
        //打开新窗口按钮 
        theButton=document.createElement("Span"); 
        theButton.className="add2ListBtn"; 
        theButton.innerText="2"; 
        theButton.title="打开新窗口"; 
        theButton.onclick=musicList_newWinBtn_click; 
        theButton.onmouseover=musicList_item_mouseover; 
        theButton.onmouseout=musicList_item_mouseout; 
        theD.insertBefore(theButton); 
         
        theC.insertBefore(theD); 
    } 

//####关于播放器播放音乐的代码###### 
//—-检查播放器状态——- 
function checkPlayStatus(oldState,newState){ 
    try{ 
        if(MediaPlayer1.PlayState==0){ 
            MediaPlayer1.detachEvent("PlayStateChange",checkPlayStatus); 
            MediaPlayer1.stop(); 
            if(playList.options.selectedIndex<playList.options.length-1){ 
                playList.options[playList.options.selectedIndex+1].selected=true; 
            }else{ 
                playList.options[0].selected=true; 
            } 
            MediaPlayer1.fileName=playList.value; 
            MediaPlayer1.play(); 
            setTimeout(’MediaPlayer1.attachEvent("PlayStateChange",checkPlayStatus);’,5000); 
        } 
    }catch(e){} 

//**********Event Function Area*************** 
//———-Play List Event Start————- 
function playList_dragOver(){ 
    event.returnValue=false; 

function playList_dragEnter(){ 
    event.returnValue=false; 
    event.dataTransfer.dropEffect=’link’; 

function playList_drop(){ 
    strTxt=unescape(event.dataTransfer.getData(’Text’).split(":")[0]).replace(/\[\+\]/,"");; 
    strURL=unescape(event.dataTransfer.getData(’Text’).split(":")[1]).replace(/\[\+\]/,"");; 
    playList.options[playList.options.length]=new Option(strTxt,strURL); 

function playList_keyDown(){ 
    if(event.keyCode==46){ 
        try{ 
            playList.options[playList.options.selectedIndex].outerHTML=""; 
        }catch(e){} 
        return(false); 
    } 
    if(event.keyCode==13){ 
        playList_dblClick(); 
        return(false); 
    } 

function playList_dblClick(){ 
    MediaPlayer1.detachEvent("PlayStateChange",checkPlayStatus); 
    MediaPlayer1.fileName=playList.value; 
    MediaPlayer1.play(); 
    setTimeout(’MediaPlayer1.attachEvent("PlayStateChange",checkPlayStatus);’,1000); 

//———-Music List Event Start————- 
function musicList_dragStart(){ 
    if(event.srcElement.tagName==’A’){ 
        event.dataTransfer.setData(’Text’,escape(event.srcElement.innerText)+":"+escape(event.srcElement.href)); 
    }else{ 
        return(false); 
    } 

function musicList_mouseover(){ 
    this.style.backgroundColor="#D5EFD5"; 

function musicList_mouseout(){ 
    this.style.backgroundColor=""; 

function musicList_item_mouseover(){ 
    this.style.color="gold"; 

function musicList_item_mouseout(){ 
    this.style.color=""; 

function musicList_item_click(){ 
    strTxt=event.srcElement.innerText; 
    strURL=event.srcElement.href; 
    playList.innerHTML=""; 
    playList.options[0]=new Option(strTxt,strURL); 
    playList.options[0].selected=true; 
    event.returnValue=false; 
    playList_dblClick(); 
    return(false); 

function musicList_add2ListBtn_click(){ 
    strTxt=event.srcElement.parentNode.firstChild.innerText.replace(/\[\+\]/,""); 
    strURL=event.srcElement.parentNode.firstChild.href; 
    playList.options[playList.options.length]=new Option(strTxt,strURL); 
    return(false); 

function musicList_scrollUpBtn_click(){ 
    this.parentNode.parentNode.scrollTop-=20; 

function musicList_scrollDownBtn_click(){ 
    this.parentNode.parentNode.scrollTop+=20; 

function musicList_newWinBtn_click(){ 
    open(this.parentNode.firstChild.href); 

function musicList_nav_click(){ 
    pageNo=this.pageID; 
    musicListNav.disabled=true; 
    this.style.color="#FF0000"; 
    for(var i=0;i<musicListNav.all.tags("span");i++){ 
        musicListNav.all.tags("span")[i].onclick=null; 
    } 
    initLoadMusic(); 

//**********Private Functions Lib*************** 
function b2s(b){ 
    var adodbStream=new ActiveXObject("ADODB.Stream");  
  adodbStream.Type=1;//1=adTypeBinary 
  adodbStream.Open(); 
  adodbStream.write(b); 
  adodbStream.position=0; 
  adodbStream.Type=2; 
  adodbStream.charset="gb2312"; 
  //adodbStream.charset="_autodetect_all"; 
  var re=adodbStream.readText(); 
  adodbStream=null; 
  return(re); 

function createNavigate(){ 
    musicListNav.innerHTML=""; 
    musicListNav.disabled=false; 
    var theMax=taskURLs.length; 
    var theC=document.createElement("span"); 
    musicListNav.insertBefore(theC); 
     
    theMin=pageNo-4>0?pageNo-4:0; 
    thePageCount=parseInt(theMax/pageSize)+(theMax%pageSize==0?0:1); 
    theMax=pageNo+5<thePageCount?pageNo+5:thePageCount; 
     
    theButton=document.createElement("span"); 
    theButton.className="add2ListBtn"; 
    theButton.innerText="7"; 
    theButton.pageID=0; 
    theButton.onmouseover=musicList_item_mouseover; 
    theButton.onmouseout=musicList_item_mouseout; 
    theButton.onclick=musicList_nav_click; 
    theC.insertBefore(theButton); 
    for(var j=theMin;j<theMax;j++){ 
        theButton=document.createElement("span"); 
        theButton.className="add2ListBtn2"; 
        theButton.innerText=j+1; 
        theButton.pageID=j; 
        if(j!=pageNo){ 
            theButton.onmouseover=musicList_item_mouseover; 
            theButton.onmouseout=musicList_item_mouseout; 
            theButton.onclick=musicList_nav_click; 
        }else{ 
            theButton.style.color="Blue"; 
        } 
        theC.insertBefore(theButton); 
    } 
    theButton=document.createElement("span"); 
    theButton.className="add2ListBtn"; 
    theButton.innerText="8"; 
    theButton.pageID=thePageCount-1; 
    theButton.onmouseover=musicList_item_mouseover; 
    theButton.onmouseout=musicList_item_mouseout; 
    theButton.onclick=musicList_nav_click; 
    theC.insertBefore(theButton); 

</script> 
<body onload="init();"> 
<!– 歌曲列表  –> 
<div id=musicList ondragstart="musicList_dragStart();"> 
<div id=musicListTitle>All Music</div> 
<div id=musicListContent></div> 
<hr> 
分页:<br> 
<div id=musicListNav></div> 
<hr> 
<marquee scrolldelay=50 scrollamount=1> 
Tips: 把歌曲拖入播放列表 
&nbsp;&nbsp;&nbsp;&nbsp; 
Tips: 无法播放时点击左右箭头更换音乐地址 
</marquee> 
</div> 

<!– 状态栏  –> 
<div id=processBar style="display:none;">Processing…</div> 

<!– 播放器  –> 
<table id=table01> 
    <tr> 
        <td> 
            <object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" STANDBY="Loading Windows Media Player components…" TYPE="application/x-oleobject"> 
                <param name="AudioStream" value="-1"> 
                <param name="AutoSize" value="-1"> 
                <!–是否自动调整播放大小–> 
                <param name="AutoStart" value="0"> 
                <!–是否自动播放–> 
                <param name="AnimationAtStart" value="-1"> 
                <param name="AllowScan" value="-1"> 
                <param name="AllowChangeDisplaySize" value="-1"> 
                <param name="AutoRewind" value="0"> 
                <param name="Balance" value="0"> 
                <!–左右声道平衡,最左-9640,最右9640–> 
                <param name="BaseURL" value> 
                <param name="BufferingTime" value="15"> 
                <!–缓冲时间–> 
                <param name="CaptioningID" value> 
                <param name="ClickToPlay" value="-1"> 
                <param name="CursorType" value="0"> 
                <param name="CurrentPosition" value="0"> 
                <!–当前播放进度 -1 表示不变,0表示开头 单位是秒,比如10表示从第10秒处开始播放,值必须是-1.0或大于等于0–> 
                <param name="CurrentMarker" value="0"> 
                <param name="DefaultFrame" value> 
                <param name="DisplayBackColor" value="0"> 
                <param name="DisplayForeColor" value="16777215"> 
                <param name="DisplayMode" value="0"> 
                <param name="DisplaySize" value="0"> 
                <!–视频1-50%, 0-100%, 2-200%,3-全屏 其它的值作0处理,小数则采用四舍五入然后按前的处理–> 
                <param name="Enabled" value="-1"> 
                <param name="EnableContextMenu" value="-1"> 
                <!-是否用右键弹出菜单控制–> 
                <param name="EnablePositionControls" value="-1"> 
                <param name="EnableFullScreenControls" value="-1"> 
                <param name="EnableTracker" value="-1"> 
                <!–是否允许拉动播放进度条到任意地方播放–> 
                <param name="Filename" value="" valuetype="ref"> 
                <param name="InvokeURLs" value="-1"> 
                <param name="Language" value="-1"> 
                <param name="Mute" value="0"> 
                <!–是否静音–> 
                <param name="PlayCount" value="10"> 
                <!–重复播放次数,0为始终重复–> 
                <param name="PreviewMode" value="-1"> 
                <param name="Rate" value="1"> 
                <!–播放速度1.0-2.0倍的速度播放–> 
                <param name="SAMILang" value> 
                <param name="SAMIStyle" value> 
                <param name="SAMIFileName" value> 
                <!–选择同时播放(伴音)的歌曲–> 
                <param name="SelectionStart" value="-1"> 
                <param name="SelectionEnd" value="-1"> 
                <param name="SendOpenStateChangeEvents" value="-1"> 
                <param name="SendWarningEvents" value="-1"> 
                <param name="SendErrorEvents" value="-1"> 
                <param name="SendKeyboardEvents" value="0"> 
                <param name="SendMouseClickEvents" value="0"> 
                <param name="SendMouseMoveEvents" value="0"> 
                <param name="SendPlayStateChangeEvents" value="-1"> 
                <param name="ShowCaptioning" value="0"> 
                <!–是否显示字幕,为一块黑色,下面会有一大块黑色,一般不显示–> 
                <param name="ShowControls" value="-1"> 
                <!–是否显示控制,比如播放,停止,暂停–> 
                <param name="ShowAudioControls" value="-1"> 
                <!–是否显示音量控制–> 
                <param name="ShowDisplay" value="0"> 
                <!–显示节目信息,比如版权等–> 
                <param name="ShowGotoBar" value="0"> 
                <!–一条框,在下面,有往下箭头–> 
                <param name="ShowPositionControls" value="-1"> 
                <!–是否显示往前往后及列表,如果显示一般也都是灰色不可控制–> 
                <param name="ShowStatusBar" value="-1"> 
                <!–当前播放信息,显示是否正在播放,及总播放时间和当前播放到的时间–> 
                <param name="ShowTracker" value="-1"> 
                <!–是否显示当前播放跟踪条,即当前的播放进度条–> 
                <param name="TransparentAtStart" value="-1"> 
                <param name="VideoBorderWidth" value="0"> 
                <!–显示部的宽部,如果小于视频宽,则最小为视频宽,或者加大到指定值,并自动加大高度.此改变只改变四周的黑框大小,不改变视频大小–> 
                <param name="VideoBorderColor" value="0"> 
                <!–显示黑色框的颜色, 为RGB值,比如ffff00为黄色–> 
                <param name="VideoBorder3D" value="0"> 
                <param name="Volume" value="0"> 
                <!–音量大小,负值表示是当前音量的减值,值自动会取绝对值,最大为0,最小为-9640,最大0–> 
                <param name="WindowlessVideo" value="0"> 
                <!–如果是0可以允许全屏,否则只能在窗口中查看–> 
            </object> 
        </td> 
        <td> 
            <div id=playListTitle>Play List:</div> 
            <select id=playList size=2 ondragover="playList_dragOver();" ondragenter="playList_dragEnter();" 
             ondrop="playList_drop();" onkeydown="playList_keyDown();" ondblclick="playList_dblClick();"> 
            </select> 
        </td> 
    </tr> 
</table> 

<body> 
</html> 

赞(0)
未经允许不得转载:小叶白龙博客 » MyHTML Player release v1.1
分享到: 更多 (0)

评论 547

评论前必须登录!