小工具開發筆記—IE自動填表器 -- 第二篇:執行一段JavaScript腳本


系列導航:

引子

時刻三年,我原本無心繼續更新這篇博文。恰巧近日招商銀行網站全新改版,導致我之前開發的小工具無法正常使用,故萌生念頭動手開發自動填表器2.0版本。此文將作為博文的一個延續以及補充,不過內容將會圍繞2.0版本來講解。之前的博文也會更新下載2.0填表器。

簡介

首先啰嗦一下為什么1.0填表器不能工作於新版招行。原因很簡單,因為1.0只支持有限HTML標簽(如HtmlInput, HtmlImage等)。全新改版后的招行“不但”支持了Webkit瀏覽器,“而且”在頁面里面嵌入了frame -- 這是1.0填表器所不能支持的一個控件,也是1.0填表器當時的一個backlog。受限於C++開發的緩慢節奏,我並不打算將這些HtmlElement一一用C++的類來實現,為了一勞永逸解決這個問題,2.0版本引入了動態執行JavaScript腳本的功能 -- 用JS腳本來解決實際業務問題,開發快速,靈活,簡單。

OK,再用一句話概括一下2.0填表器:這是一個IE插件,會在IE的工具欄上面添加一個按鈕,點擊后根據預配置信息以及當前URL自動尋找一段預編輯的JS,然后在當前頁面上下文里執行。

image

看一下2.0的文件結構

image

  • athena.dll: 填表器主程序(智慧女神雅典娜?)
  • athena.js: 主配置腳本
  • jquery.js: 工具腳本
  • *.js: 針對某個頁面的自動化腳本

首先看一下athena.js配置腳本文件,

image

以上是athena.js配置腳本,是一個JSON格式的文件。里面有兩部分信息:preload是一個string array,每一個成員指向一個js腳本,作用是在執行bot之前先執行這些腳本;pages是一個JSON array,每個成員有url和bot兩個屬性,url用來和當前頁面url匹配,如果匹配成功,則執行bot里面的js文件(會先執行preload里面的每一個js,這樣就可以用jquery的方法啦)

然后再看一下cmbchina.js主程序,這個腳本負責自動填表招商銀行在線支付頁面,

image

以上則是cmbchina.js,用來自動化操作招行在線支付頁面。JS代碼就不做多解釋了,本文主要講C++實現。需要一提的是JS里面有一句話 var bot = new ActiveXObject("Noria.Bot"); 這是創建一個COM對象,用來操作招行本身的ActiveX控件。這個COM對象也是C++開發的,我會在下文介紹。

功能實現

現在開始介紹C++代碼。首先,這里會出現兩個C++類,更准確的說是兩個ATL Simple Object。

1. CBot類,ProgID=Noria.Bot,暴露一個Fill方法,輸入參數是HTMLElement, BSTR, LONG,輸出參數無,作用是對ActiveX對象填表。其核心代碼如下:

image

2. CKaleidoscope類(萬花筒?嗯),沒有ProgID,要實現IOleCommandTarget接口。這個類用來在IE工具欄上內嵌一個按鈕,並且處理點擊事情。其核心代碼如下:

image

好吧,看到這里也許會發現,我把核心邏輯實現壓入到一個叫做Autobot的類里面。是的,這里Autobot不是汽車人的意思,而是自動填表機器人,其方法run的大致邏輯如下:

  1. 檢查上下文,獲取當前window和document對象
  2. 加載athena.js配置腳本
  3. 獲取當前頁面url,檢查athena對象里是否有與之匹配的預定義信息
  4. 若無,則結束
  5. 若有,則分別加載並執行preload里的js文件,然后執行匹配的bot文件

其實把邏輯說清楚了就沒什么太多技術含量了,我在這里貼出兩處核心代碼,一是如何找到當前的window和document,二是如果執行一段JS腳本

image

image

尾聲

行文至此,基本上闡述了填表器2.0的工作原理和主要功能實現,希望對讀者能有所幫助。最后獻上一段視頻吧,用來充分演示填表器2.0的強大功能。

<程序下載地址>

[補充] 由於實在沒有時間測試並且進一步優化,此程序目前只能保證在IE9+Win7環境正常運行。(Win8+IE10基本上不能工作:( )

<在線瀏覽代碼>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM