国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
使用 DotNet 編寫(xiě)瀏覽器外掛. NetBHO .
BHO簡(jiǎn)介: 
    BHO就是Browser Helper Object. 意思就是IE的插件.. 
    這里有一篇介紹. http://www.microsoft.com/mind/0598/browhelp.asp
    更多的控制可以參考: http://msdn.microsoft.com/workshop/browser/ext/extensions.asp
    BHO關(guān)聯(lián)原理 (BHO關(guān)聯(lián)的是SHDOCVW,也就是說(shuō)不只關(guān)聯(lián)IE,下面全部用IE來(lái)說(shuō)明)
    1.IE的窗口打開(kāi)時(shí),先尋找SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\ 這里的對(duì)應(yīng)的是CLSID
    2.IE根據(jù)CLSID創(chuàng)建 BHO 對(duì)象,并且查找 IOleObjectWithSite 接口. (這個(gè)接口非常簡(jiǎn)單,只有SetSite和GetSite兩個(gè)方法)
    3.IE把IWebBrowser2傳到 BHO 的 SetSite 方法
    4.窗口關(guān)閉時(shí),IE把 null 傳到 BHO 的 SetSite 方法.
 
    也就是說(shuō),如果你要做一個(gè)BHO,那么要做以下幾個(gè)步驟
    1.創(chuàng)建 COM 類(lèi)型, 實(shí)現(xiàn) IOleObjectWithSite 
    2.在 SetSite 的時(shí)候, 得到IWebBrowser2 , 并且進(jìn)行自定義的初始化 . (一般是關(guān)聯(lián)IWebBrowser2的事件)
    3.注冊(cè)COM類(lèi)型,并且關(guān)聯(lián)到SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\
 
OK , 下面來(lái)說(shuō)說(shuō)如何用 DotNet 做到這點(diǎn) . 我這里有一個(gè)例子程序,是用 VS.NET2003 寫(xiě)的. 里面有一個(gè) _steps.txt 解析了具體的過(guò)程.
 
[ 下載地址http://www.lostinet.com/files/netbho.rar ]
 
要測(cè)試這個(gè)例子,你只需要編譯這個(gè)工程,然后執(zhí)行NetBHO.reg . 再重新打開(kāi)IE就OK了.
 
_steps.txt 的內(nèi)容為
 
重要的步驟是: 
.引用 Interop.SHDocVw . 這個(gè)引用有點(diǎn)麻煩,因?yàn)橐?cè)到COM,所以NetBHO必須是強(qiáng)名的。所以必須要用ildasm/ilasm對(duì)SHDocVw重新進(jìn)行編譯和引用。
.定義 IOleObjectWithSite . 代碼在 oledef.cs 里. 這個(gè)定義是根據(jù) DotNet COM Interop 的原則, 在我VC6的Include找到的IOleObjectWithSite的定義的基礎(chǔ)上進(jìn)行的.
.定義 class MyBHO : IObjectWithSite , 并且實(shí)現(xiàn)它. 這個(gè)相對(duì)還是容易了.. 

例子的實(shí)現(xiàn)是關(guān)聯(lián)了一個(gè) BeforeNavigate2事件 , 如果 url 是 ?keyword 或 http:///?keyword , 那么就轉(zhuǎn)到 http://www.google.com/search?q=keyword 去. 
也就是說(shuō),如果你在地址欄里輸入 ?helloworld , 那么就會(huì)用 google 來(lái)查 helloworld 

另外例子還關(guān)聯(lián)了 NavigateComplete2事件, 并且在頁(yè)面上插入了一條廣告 .... 
 


 

解決 FireFox 下[使用event很麻煩] 的問(wèn)題.
在FireFox下編寫(xiě)事件處理函數(shù)是很麻煩的事.
因?yàn)镕ireFox并沒(méi)有 window.event . 如果要得到 event 對(duì)象,就必須要聲明時(shí)間處理函數(shù)的第一個(gè)參數(shù)為event.

所以為了兼容IE與FireFox,一般的事件處理方法為:
btn.onclick=handle_btn_click;
function handle_btn_click(evt)
{
    if(evt==null)evt=window.event;//IE
    //處理事件.
}
對(duì)于簡(jiǎn)單的程序,這不算麻煩.

但對(duì)于一些復(fù)雜的程序,某寫(xiě)函數(shù)根本就不是直接與事件掛鉤的.如果要把event傳進(jìn)該參數(shù),那么所有的方法都要把event傳來(lái)傳去..這簡(jiǎn)直就是噩夢(mèng).

下面介紹一個(gè)解決這個(gè)麻煩事的方法,與原理.

JScript中,函數(shù)的調(diào)用是有一個(gè) func.caller 這個(gè)屬性的.
例如 
function A()
{
    B();
}
function B()
{
    alert(B.caller);
}
如果B被A調(diào)用,那么B.caller就是A

另外,函數(shù)有一個(gè)arguments屬性. 這個(gè)屬性可以遍歷函數(shù)當(dāng)前執(zhí)行的參數(shù):
function myalert()
{
    var arr=[];
    for(var i=0;i        arr[i]=myalert.arguments[i];
    alert(arr.join("-"));
}
alert("hello","world",1,2,3)
就能顯示 hello-world-1-2-3
(arguments的個(gè)數(shù)與調(diào)用方有關(guān),而與函數(shù)的參數(shù)定義沒(méi)有任何關(guān)系)

根據(jù)這兩個(gè)屬性,我們可以得到第一個(gè)函數(shù)的event對(duì)象:
btn.onclick=handle_click;
function handle_click()
{
    showcontent();
}
function showcontent()
{
    var evt=SearchEvent();
    if(evt&&evt.shiftKey)//如果是基于事件的調(diào)用,并且shift被按下
        window.open(global_helpurl);
    else
        location.href=global_helpurl;
}
function SearchEvent()
{
    func=SearchEvent.caller;
    while(func!=null)
    {
        var arg0=func.arguments[0];
        if(arg0)
        {
            if(arg0.constructor==Event) // 如果就是event 對(duì)象
                return arg0;
        }
        func=func.caller;
    }
    return null;
}
這個(gè)例子使用了SearchEvent來(lái)搜索event對(duì)象. 其中 'Event' 是 FireFox 的 event.constructor .
在該例子運(yùn)行時(shí),
SearchEvent.caller就是showcontent,但是showcontent.arguments[0]是空.所以 func=func.caller 時(shí),func變?yōu)閔andle_click .
handle_click 被 FireFox 調(diào)用, 雖然沒(méi)有定義參數(shù),但是被調(diào)用時(shí),第一個(gè)參數(shù)就是event,所以handle_click.arguments[0]就是event !

針對(duì)上面的知識(shí),我們可以結(jié)合 prototype.__defineGetter__ 來(lái)實(shí)現(xiàn) window.event 在 FireFox 下的實(shí)現(xiàn):

下面給出一個(gè)簡(jiǎn)單的代碼.. 有興趣的可以補(bǔ)充

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
關(guān)于火狐(firefox)及ie下event獲取的方法
書(shū)寫(xiě)同時(shí)兼容IE和FireFox的事件event處理代碼
js 的event對(duì)象
Javascript與CSS在IE和Firefox中的誤區(qū)及區(qū)別 - AJAX - AJA...
IE和Firefox在JavaScript方面的兼容性
Javascript的IE和Firefox兼容性匯編
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服