国产美女一级毛片精品久久久|婷婷影院在线综合免费视频|最新国产午夜精品视频成人|久久精品九九无码免费

非IE瀏覽器對彈窗的過濾討論

來源:北大青鳥飛迅校區(qū)|發(fā)布時間:2013-04-27 15:55:48

  廣告窗口的泛濫使得不少網民不堪鋪天蓋地的廣告騷擾紛紛放棄標準IE瀏覽器而使用諸如GoSurf、MyIE2、NetCapter這樣的使用IE內核支持多頁面并能自動屏蔽廣告的軟件。據(jù)說在即將發(fā)布的IE6 sp2中微軟也將加入封殺廣告窗口功能。

  這對大多數(shù)網民當然是件好事,可對于程序員而言,我們使用彈出窗口的方式與一般廣告并無本質的不同,這樣的窗口也會被彈出窗口管理器不分青紅皂白的封殺,其結果當然是我們不愿看到的。有沒有一個標準的方式能讓窗口正常的彈出呢?這就要求我們了解瀏覽器封殺廣告的原理。通常的廣告封殺器使用以下三種方式進行廣告過濾:

  (1)基于窗口標題的封殺方式

  這種封殺方式的原理是定時檢查所有的IE窗口標題,然后于已經有的列表(由程序維護的一個數(shù)組列表)來比較,如果有相同的,我們就關閉這個窗口。顯然,這種方式有著諸多缺陷,它封殺了所有的彈出的窗口,管得太死,在程序真正使用的很少。不過,依據(jù)它進行的變形方式倒使用得相當?shù)钠毡。那就是,基于窗口標題名稱的智能過濾技術,它根據(jù)彈出窗口的標題是否含有關于廣告的關鍵字進行封殺,這為提高過濾效果作出了很好的探索。

  (2)基于窗口類和位置的封殺方式

  經過分析發(fā)現(xiàn)正常瀏覽窗口的類名是IEFRAME和CabinetWClass,而廣告窗口的類名是CabinetWClass。進一步分析發(fā)現(xiàn):廣告窗口的WorkerA類和Shell DocObject View類的rect.top的值是相同的,正常IE窗口的WorkerA類和Shell DocObject View類的rect.top的值是不相同的。根據(jù)以上兩點就可以書寫廣告殺手程序了。 事實上,我對此程序的通用性持懷疑態(tài)度。因為筆者用Spy++分析發(fā)現(xiàn),在Windows2000( 筆者使用的操作系統(tǒng))中,IE窗口的類都為IEFrame。同時,由于Win2000是一個基于Unicode代碼的操作系統(tǒng),所以沒有WorkerA類,而以WorkerW類取而代之。同時,也不存在rect.top不相同的情況,由于筆者沒有WindowsXP操作系統(tǒng),所以不能針對WindowsXP作進一步的試驗。

  (3)基于IE COM組件的封殺方式

  以上兩種方式都是把IE窗口當作一個普通的Windows窗口對待,進行判斷的。事實上,IE是一個典型的基于COM組件的瀏覽器,所有的基于IE內核的瀏覽器都是包裝shdocvw.dll文件,然后書寫相應的BHO代碼。只有這樣才能做到真正的控制IE瀏覽器,而不是方法一、二這樣的隔靴搔癢。

  還有一種基于IE內核的彈出窗口封殺方法。它可以在彈出窗口打開之前加以攔截。其原理是:每當IE打開一個新的窗口時候都會觸發(fā)NewWindow事件,執(zhí)行OnNewWindow2([out] IDispatch*, [out] BOOL *bCancel)方法。重載此方法,判斷打開新窗口事件是否發(fā)生在瀏覽頁面已經下載完畢之后。如果是,說明是正常的彈出窗口,反之加以攔截。

  由于Gosurf這樣的瀏覽器本身就重載了Shocvm.dll組件,所以使用第三種方法就自然成了順理成章的事。然而在使用過程中有時也會發(fā)現(xiàn),廣告過濾不很完美,但原理基本如此。

上一篇:怎樣才算掌握Java編程?
下一篇:J2ME學習需要的一些Java知識

熱門話題

招生熱線: 4008-0731-86 / 0731-82186801

學校地址: 長沙市天心區(qū)團結路6號

Copyright © 2006 | 湖南大計信息科技有限公司 版權所有

湘ICP備14017520號-3

關注我們
在線咨詢
嘿,我來幫您!
墨脱县| 枝江市| 平谷区| 上饶市| 永兴县| 恩施市| 会昌县| 白河县| 扶绥县| 潜江市| 清水河县| 威远县| 鸡西市| 余江县| 耒阳市| 云龙县| 绥德县| 临武县| 大田县| 正定县| 中卫市| 师宗县| 南陵县| 宜君县| 白城市| 保康县| 仁布县| 铁岭县| 梨树县| 康平县| 山东| 阳西县| 北川| 陆川县| 小金县| 东安县| 新宁县| 郯城县| 郧西县| 长沙县| 腾冲县|