首页 > 编程 > HTML > 正文

超简陋浏览器

2020-01-25 19:40:51
字体:
来源:转载
供稿:网友
可是那些破站点让人太郁闷了...不是弹出广告,就是满屏幕飘浮动广告....气死我了... 

所以做了一个超简陋的浏览器,把页面中的 JS 基本上全禁掉了(禁用JS的正则不是很好,此外CSS里的没禁掉,不过目前反正够俺用就好了),顺便把 iframe 也全部干掉 

还可以自动记得上次浏览的页面,打开就直接进入,看书的时候就不怕打断了 

因为超简陋,所以连 表单也不支持,只支持链接,哈哈,看书倒是够用了.... 

代码中的 伪session 处理 和 俺自己封装的 xmlhttp 值得一看 


不能直接运行,保存到本地,另存为 HTA 使用,哈哈 
复制代码代码如下:

<head> 
<title>Book Viewer</title> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
<style> 
body { margin:0px; padding:0px; overflow:auto; border-style:none; font-size:12px; background-color:buttonface; } 
iframe { width:100%; border-style:none; position:absolute; top:25px; } 

#i1 { height:22px; line-height:18px; width:100%; border:1px solid #666; margin:0px 2px; padding:0px 10px; } 
</style> 
<script> 
strSessionName="bookviewer_lastURL"; 
lastURL=""; 
xp=new xmlhttp(); 

function checkMe(){ 
    if(i1.value!=lastURL){ 
        lastURL=i1.value; 
        session_set(strSessionName,lastURL); 
    } 
    try{ 
        for(var i=0;i<f1.document.links.length;i++)f1.document.links[i].onclick=n0; 
    }catch(e){} 
    if(/book/.5seecn/i.test(lastURL))f1.document.body.onkeydown=chkKey; 


function chkKey(){ 
    var allLinks; 
    if(f1.event.keyCode==39){ 
        allLinks=f1.document.links; 
        for(var i=0;i<allLinks.length;i++)if(/下一页/.test(allLinks[i].innerHTML)){ 
            i1.value=allLinks[i].href; n2(); return; 
        } 
    }else if(f1.event.keyCode==37){ 
        allLinks=f1.document.links; 
        for(var i=0;i<allLinks.length;i++)if(/上一页/.test(allLinks[i].innerHTML)){ 
            i1.value=allLinks[i].href; n2(); return; 
        } 
    } 


function init(){ 
    i1.onkeydown=function(){ if(event.keyCode==13)n2(); } 
    resizeWin(); 
    i1.focus(); 
    i1.select(); 
    if(session_exists(strSessionName)){ i1.value=session_get(strSessionName); n2(); } 
    setInterval(checkMe,200); 


function resizeWin(){ 
    document.getElementById("f1").style.height=document.body.clientHeight-25; 


function n0(){ 
    n1(this.href); 
    return(false); 


function n1(str){ 
    i1.value=str; 
    n2(); 


function n2(){ 
    str=i1.value; 
    if(i1=="")return; 
    if(!/^http://///i.test(str))str="http://"+str; 
    document.title="Book Viewer - Loading..."; 
    xp.open("get",str); 
    xp.onreadystatechange=n22; 
    xp.send(""); 


function n22(){ 
    var str; 
    if(this.readyState==4){ 
        if(this.status==200){ 
            str=adodb_binary2string(this.getAttribute("responseBody")); 
            str=str.replace(/<script[/s/S]+?//script>/gi,"").replace(/<iframe[/s/S]+?//iframe>/gi,"").replace(/on(load|mouseover|mouseout|mousemove|focus|blur|keydown|keyup|keypress|change|readystatechange|click|dblclick|mousewheel) *= */"[/s/S]+?/"/gi,""); 
            f1.document.open(); 
            f1.document.write("<base href=/""+i1.value.substring(0,i1.value.lastIndexOf("/")+1)+"/" //>"); 
            try{ 
                f1.document.write(str); 
            }catch(e){} 
            f1.document.close(); 
            f1.document.body.focus(); 
            document.title="Book Viewer - Ready"; 
        } 
    } 


function cancelErr(){ return(true); } 

html_encode=function(strV){ 
    return(strV.replace(/&/g,"&").replace(/"/g,""").replace(/ /g," ").replace(//t/g,"    ").replace(/</g,"<").replace(/>/g,">").replace(//r/n/g,"<br>")); 


function adodb_binary2string(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="_autodetect_all"; 
    var re=adodbStream.readText(); 
    adodbStream=null; 
    return(re); 


function session_delete(strName){ 
    var str, reg, expt, dt; 
    if(!session_exists(strName))return; 
    strName=escape(strName); 
    strValue=""; 
    dt=new Date(); 
    dt.setYear(1980); 
    expt=";expires="+dt.toGMTString()+";"; 
    str=strName+"="+strValue+expt; 
    document.cookie=str; 


function session_get(strName){ 
    var str, reg; 
    str=document.cookie; 
    strName=escape(strName); 
    reg=new RegExp(strName+"=([^;]+)"); 
    if(!reg.test(str))return; 
    return(unescape(str.match(reg)[1])); 


function session_set(strName,strValue,blnExpireAfterClose){ 
    var str, reg, expt, dt; 
    strName=escape(strName); 
    strValue=escape(strValue); 
    dt=new Date(); 
    dt.setYear(2099); 
    expt=blnExpireAfterClose?"":";expires="+dt.toGMTString()+";"; 
    str=strName+"="+strValue+expt; 
    document.cookie=str; 


function session_exists(strName){ 
    var str, reg; 
    str=document.cookie; 
    strName=escape(strName); 
    reg=new RegExp(strName+"=(.+);?"); 
    if(!reg.test(str)){return(false);}else{return(true);} 


function xmlhttp(){ 
    // declare all the private variable 
    var aryArgu, aryOnPropertyChange_AttachedEvents, aryRequestHeaders, blnAsyn, objRequest, objSelf, objThat, strMethod, strProtocol, strToBeSend, strUID, strUrl; 
    // declare all the private functions 
    var defaultEvent_onreadystatechange, getXMLRequester, init, realEvent_onreadystatechange, uid; 

     
    // declare public variable 
    this.blnSendDefaultHeader=false; 
    this.readyState=0; 
    this.responseText=""; 
    this.responseXML=""; 
    this.status=-1; 

    // public event 
    this.onreadystatechange=defaultEvent_onreadystatechange; 

    // public method 
    this.attachEvent=function(eventHandle,functionHandle){ 
        var eventHandle=String(eventHandle).toLowerCase(); 
        switch(eventHandle){ 
            case "onreadystatechange": 
                if(this.onreadystatechange!=defaultEvent_onreadystatechange){ 
                    this.onreadystatechange=defaultEvent_onreadystatechange; 
                    aryOnPropertyChange_AttachedEvents=new Array(); 
                } 
                aryOnPropertyChange_AttachedEvents.push(functionHandle); 
                return(true); 
            break; 
            default: 
                return("Not reallized yet."); 
            break; 
        } 
    } 

    this.deleteRequestHeader=function(strName){ 
        delete aryRequestHeaders[strName]; 
    } 

    this.detachEvent=function(eventHandle,functionHandle){ 
        var eventHandle=String(eventHandle).toLowerCase(); 
        switch(eventHandle){ 
            case "onreadystatechange": 
                if(this.onreadystatechange!=defaultEvent_onreadystatechange){ 
                    this.onreadystatechange=defaultEvent_onreadystatechange; 
                    aryOnPropertyChange_AttachedEvents=new Array(); 
                    return(true); 
                } 
                for(var i=0;i<aryOnPropertyChange_AttachedEvents.length;i++){ 
                    if(aryOnPropertyChange_AttachedEvents[i]==functionHandle){ 
                        aryOnPropertyChange_AttachedEvents.splice(i,1); 
                        break; 
                    } 
                } 
                return(true); 
            break; 
            default: 
                return("Not reallized yet."); 
            break; 
        } 
    } 

    this.flush=function(){ 
        try{ this.readyState=objRequest.readyState; }catch(e){} 
        try{ this.responseText=objRequest.responseText; }catch(e){} 
        try{ this.responseXML=objRequest.responseXML; }catch(e){} 
        try{ this.status=objRequest.status; }catch(e){} 
    } 

    this.getAllResponseHeaders=function(){ 
        return(objRequest.getAllResponseHeaders()); 
    } 

    this.getAttribute=function(strName,strRef){ 
        switch(strName){ 
            case "allHeaders": 
                return(objRequest.getAllResponseHeaders()); 
            case "asyn": 
                return(blnAsyn); 
            case "header": 
                return(objRequest.getResponseHeader(strRef)); 
            case "method": 
                return(strMethod); 
            case "protocol": 
                return(strProtocol); 
            case "readyState": 
                return(objRequest.readyState); 
            case "responseBody": 
                return(objRequest.responseBody); 
            case "responseText": 
                return(objRequest.responseText); 
            case "responseXML": 
                return(objRequest.responseXML); 
            case "send": case "sendString": case "strSend": 
                return(strToBeSend); 
            case "status": 
                return(objRequest.status); 
            case "uid": 
                return(strUID); 
            case "url": 
                return(strUrl); 

            default: 
                return(false); 
        } 
    } 

    this.getResponseHeader=function(strHeaderName){ 
        return(objRequest.getResponseHeader(strHeaderName)); 
    } 

    this.init=init; 

    this.open=function(method,url,asyn){ 
        var theURL; 
        strMethod=String(method).toLowerCase()=="POST"?"POST":"GET"; 
        strUrl=String(url); 
        blnAsyn=String(asyn).toLowerCase()=="false"?false:true; 
        strProtocol=strUrl.match(/http://///i)?"http":"other"; 
        theURL=strUrl 
        //if(strProtocol=="http")theURL=strUrl+(strUrl.indexOf(".")==-1?"//":"")+(strUrl.indexOf("?")==-1?"?":"&")+uid()+"=true"; 
        objRequest.open(strMethod,theURL,blnAsyn); 
    } 

    this.reset=init; 

    this.send=function(strSend){ 
        strToBeSend=String(strSend); 
        for(var i in aryRequestHeaders){ 
            objRequest.setRequestHeader(i,aryRequestHeaders[i]); 
        } 
        if(this.blnSendDefaultHeader){ 
            objRequest.setRequestHeader("Content-Length",strToBeSend.length); 
        } 
        objRequest.onreadystatechange=realEvent_onreadystatechange; 
        objRequest.send(strToBeSend); 
    } 

    this.setRequestHeader=function(strName,strValue){ 
        aryRequestHeaders[strName]=strValue; 
    } 

    // private functions 
    function defaultEvent_onreadystatechange(){} 

    function getXMLRequester(){ 
        var xmlhttp_request = false; 
        try{ 
            if( window.ActiveXObject ){ 
                for( var i = 5; i > -1; i-- ){ 
                    try{ 
                        if( i == 2 ){ 
                            xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" ); 
                        }else{ 
                            xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" ); 
                        } 
                        break; 
                    }catch(e){ 
                        xmlhttp_request = false; 
                    } 
                } 
            }else if( window.XMLHttpRequest ){ 
                xmlhttp_request = new XMLHttpRequest(); 
            } 
        }catch(e){ 
            xmlhttp_request = false; 
        } 
        return xmlhttp_request; 
    } 

    function init(){ 
        // init private variable 
        aryArgu=new Array(); 
        aryOnPropertyChange_AttachedEvents=new Array(); 
        aryRequestHeaders=new Array(); 
        blnAsyn=true; 
        objRequest=getXMLRequester(); 
        objSelf=this; 
        objThat=this; 
        strMethod="GET"; 
        strProtocol="unknown"; 
        strResponseText=""; 
        strToBeSend=""; 
        strUID=strUID?strUID:uid(); 
        strUrl=""; 
        // init public variable 
        this.blnSendDefaultHeader=false; 

        // regist this object to window 
        window[strUID]=this; 
    } 

    function realEvent_onreadystatechange(){ 
        objThat.flush(); 
        if(objThat.onreadystatechange==defaultEvent_onreadystatechange){ 
            for(var i=0;i<aryOnPropertyChange_AttachedEvents.length;i++){ 
                try{ 
                    if(typeof(aryOnPropertyChange_AttachedEvents[i])=="function"){ 
                        aryOnPropertyChange_AttachedEvents[i].call(objThat); 
                    }else if(typeof(aryOnPropertyChange_AttachedEvents[i])=="string"){ 
                        eval(aryOnPropertyChange_AttachedEvents[i]); 
                    } 
                }catch(e){alert("004"+e.description)} 
            } 
        }else{ 
            try{ 
                if(typeof(objThat.onreadystatechange)=="function"){ 
                    objThat.onreadystatechange(); 
                }else if(typeof(objThat.onreadystatechange)=="string"){ 
                    eval(objThat.onreadystatechange); 
                } 
            }catch(e){alert("005"+e.description)} 
        } 
    } 

    function uid(){ 
        return("u"+(new Date()).getTime().toString(35)+parseInt(Math.random()*999999).toString(35)); 
    } 

     
    // do init 
    this.init(); 






window.onload=init; 
window.onresize=resizeWin; 
window.onerror=cancelErr; 
</script> 
</head> 
<body> 
<input id="i1"><br> 
<iframe id="f1"></iframe> 
</body>    
 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表