四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

encode腳本和normal腳本混用的問(wèn)題與解決方法

半年前第一次做腳本編碼的時(shí)候,由于沒(méi)有什么使用經(jīng)驗(yàn),于是在51js上詢問(wèn)了一下encode腳本和normal腳本混用是否有什么問(wèn)題呢?結(jié)果沒(méi)有得到任何有建設(shè)性的意見(jiàn),這也至少說(shuō)明了兩個(gè)問(wèn)題,一是沒(méi)有人在意,二是就沒(méi)有什么問(wèn)題嘛。當(dāng)然我更樂(lè)意于接受后一種結(jié)果,就開(kāi)始了encode腳本和normal腳本的混合使用。

    在這樣的理解下做了很多的腳本,似乎也真的沒(méi)有出現(xiàn)過(guò)什么問(wèn)題,于是更加篤信自己當(dāng)初的判斷。結(jié)果又一次被IE暗算了,encode后的腳本和normal的腳本混和使用不是沒(méi)有問(wèn)題,也不是都有問(wèn)題,只是在特定的條件下會(huì)出問(wèn)題,真是暈死。看下面這個(gè)示例: 

復(fù)制代碼 代碼如下:
<html> 
<head> 
    <title>JScript Encode Research</title> 
    <meta name="author" content="birdshome@cnblogs" /> 
</head> 
<body> 
    <script language="jscript.encode" type="text/jscript.encode"> 
        #@~^8gAAAA==~,P~,P,Pr(L^Ycw.WDWOza+Rtn/klo~xP6E    mOkGUv#@#@&,~P,P~~,    @#@&~,P~P,~,P~,P,lVDDcB}4%+1Y 2MWYKOXa+Rtnd/moBbi@#@&,P~P,~P,8I@#@&PP~~,P~P@#@&,P~,P,PP}4NnmDR/+k/CLP',WE    mYbGU`*@#@&P~P~~,P~    @#@&P,P~~,PP~~,P~l^nMYcEr(L+1Yc/+k/CoBbI@#@&P,~P,PP,NIGjkAAA==^#~@ 
    </script> 
    <script language="jscript.encode" type="text/jscript.encode"> 
        #@~^FgEAAA==~,P~,P,P0!x1OkKx~2mG[`#,`8@#@&@#@&~~P,P,P~2U^KNnRa.WDWOza+R/nk/Co~{PW!x1YkKxvb@#@&P~P,P~~,    @#@&~P,PP,~~P,P,.kOndkU+vv2    mG[Rw.GDWOXancHnk/mo+E#p@#@&,P~P,P~~)i@#@&@#@&,PP,~~P,2    mGNn t+d/mL+,'~W!xmOrKxc#@#@&,P~,P,PPP@#@&~P,P~P,P~~,PMrYSk    ncBAx1W[+ //dlTnB*i@#@&,PP~~,P~8p~,V0MAAA==^#~@ 
    </script> 
    <script language="jscript" type="text/jscript"> 
        function Normal() {}  
        Normal.prototype.Message = function() 
        { 
            WriteLine('Normal.prototype.Message'); 
        };  
        Normal.Message = function() 
        { 
            WriteLine('Normal.Message'); 
        };  
    </script> 
    <script language="jscript" type="text/jscript"> 
        var msg = '.prototype.Message" Fail.<br>'; 
        function WriteLine(msg) { document.write(msg + '<br><br>'); } 

        var o = new Object(); 
        try { o.Message(); } 
        catch(e) { WriteLine('Call "Object' + msg + e.message); } 
        try { Object.Message(); } 
        catch(e) { WriteLine('Call "Object.Message" Fail. <br>' + e.message); } 

        var e = new Encode(); 
        try { e.Message(); } 
        catch(e) { WriteLine('Call "Encode' + msg + e.message); } 
        Encode.Message(); 

        var n = new Normal(); 
        try { n.Message(); } 
        catch(e) { WriteLine('Call "Normal' + msg + e.message); } 
        Normal.Message(); 
    </script> 
</body> 
</html> 

    把上面的代碼存為一個(gè)*.htm文件,打開(kāi)后得到結(jié)果為: 

  Call "Object.prototype.Message" Fail.
  Object doesn't support this property or method
  Call "Object.Message" Fail. 
  Object doesn't support this property or method
  Encode.prototype.Message
  Encode.Message
  Normal.prototype.Message
  Normal.Message
    上面那兩段jscript.encode的代碼很簡(jiǎn)單,就是: Object.prototype.Message = function()
{
    alert('Object.prototype.Message');
};
Object.Message = function()
{
    alert('Object.Message');
}; 
function Encode() {}
Encode.prototype.Message = function()
{
    WriteLine('Encode.prototype.Message');
};
Encode.Message = function()
{
    WriteLine('Encode.Message');
};  
    如果我們把上面兩段代碼替換那個(gè)html中的兩段jscript.encode的代碼,后面的運(yùn)行將不會(huì)出任何異常,會(huì)得到這樣的輸出:   Object.prototype.Message
  Object.Message
  ...
    上面這些代碼實(shí)例的試驗(yàn),已經(jīng)詳細(xì)的說(shuō)明了encode腳本代碼的問(wèn)題。就是,不能在非編碼腳本中,引用編碼腳本中導(dǎo)入到JScript內(nèi)置對(duì)象上的原型(prototype)方法和靜態(tài)方法。上面示例中的Object就是JScript的一個(gè)內(nèi)置對(duì)象,我們分別導(dǎo)入了一個(gè)prototpye方法和靜態(tài)方法Message()。而對(duì)于非內(nèi)置對(duì)象Encode,我們?cè)谝丫幋a代碼中導(dǎo)入的prototype和static方法,都可以在非編碼代碼中正常的訪問(wèn)。

    那么怎么訪問(wèn)內(nèi)置對(duì)象的導(dǎo)入方法呢?其實(shí)解決起來(lái)也不復(fù)雜,只是比較繁瑣。我們需要使用一些wrapper方法,把他們和被編碼的代碼放在一起,就可以在非編碼代碼中訪問(wèn)了,比如上面的Object的導(dǎo)入,我們可以這樣包裝它: 

Object.prototype.Message = function()
{
    WriteLine('Object.prototype.Message');
};
Object.Message = function()
{
    WriteLine('Object.Message');
};
var obj = new Object();

function ObjectPrototypeMessage()
{
    obj.Message();
}
function ObjectMessage()
{
    Object.Message();
}
    這時(shí),我們就可以通過(guò)ObjectPrototypeMessage和ObjectMessage這樣的wrapper方法訪問(wèn)到已編碼代碼中內(nèi)置對(duì)象的導(dǎo)入方法了。

JavaScript技術(shù)encode腳本和normal腳本混用的問(wèn)題與解決方法,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 纵情四海| 木村多江| 蒋昌义| 3片| 合作协议书合同| 五年级下册语文第七单元口语交际 | 座头市 电影| 战上海老电影战争片子| 福圆美里| 高达w| 黑衣人| 流萤美图| 电车男| 我的神我要敬拜你歌谱| 大雄的恐龙| 幼儿识字入门100字| 权欲| 《可爱的小鸟》阅读答案| 《求知报》答案| overwatch| 石璐| 新进社员| 河西走廊纪录片观后感| 3片| 李蕾丽主演电影大全| 新有菜免费在线观看| 色域在线| 中诺矫平机| 情事5| 溜冰圆舞曲音乐教案| 徐若| 国家宝藏之觐天宝匣 电视剧| 我亲爱的简谱| 成人在线影片| 寡妇2| 绿巨人3| 女生裸体.| 张柏芝惊艳照片| 女孩们在线观看| 免费完整队列训练教案| 底线电影|