华域联盟 hta 超简陋浏览器

超简陋浏览器

可是那些破站点让人太郁闷了...不是弹出广告,就是满屏幕飘浮动广告....气死我了...

所以做了一个超简陋的浏览器,把页面中的 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,"&amp;").replace(/"/g,"&quot;").replace(/ /g,"&nbsp;").replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").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>    

本文由 华域联盟 原创撰写:华域联盟 » 超简陋浏览器

转载请保留出处和原文链接:https://www.cnhackhy.com/13972.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部