1. 程式人生 > >修改window.external使JS可呼叫Delphi方法

修改window.external使JS可呼叫Delphi方法

在JS中,有一個比較特殊的物件,即window.external,用它可以呼叫瀏覽器提供的外部方法
一個很簡單的例子就是將當前頁新增到收藏夾
window.external.addFavorite("http://blog.csdn.net/youthon","弘石的部落格');
這樣寫指令碼就可以了。
那麼如果我想自己定義external,以便在自己的軟體內使用IE核心的瀏覽器作為UI容器,該如何做呢?
本文即是解決此問題。
一、製作TLB
在File | New | Other 選單下,選擇新建一個Type Library,這個嚮導在ActiveX頁內。
然後按下圖所示,新建一個介面,在介面下新建一個DoSearchData方法,這個方法即是將來需要新增到external中的。


完成新增後,點選儲存為TLB按鈕,將生成一個TLB檔案,此處我將它命名為GetData.tlb
二、實現IDocHostUIHandler介面
這部分相對比較簡單,從MSDN上找到相關的C++程式碼,把它轉換成Delphi的即可。程式碼如下:
 unitDocHostUIHandler;

 interface
 uses
 Windows, ActiveX;
 const
 DOCHOSTUIFLAG_DIALOG                     =$00000001;
 DOCHOSTUIFLAG_DISABLE_HELP_MENU          =$00000002;
 DOCHOSTUIFLAG_NO3DBORDER                 =$00000004

;
 DOCHOSTUIFLAG_SCROLL_NO                  =$00000008;
 DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE    = $00000010;
 DOCHOSTUIFLAG_OPENNEWWIN                 =$00000020;
 DOCHOSTUIFLAG_DISABLE_OFFSCREEN          =$00000040;
 DOCHOSTUIFLAG_FLAT_SCROLLBAR             =$00000080;
 DOCHOSTUIFLAG_DIV_BLOCKDEFAULT           =$00000100;
 DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY    = $00000200
;
 DOCHOSTUIFLAG_OVERRIDEBEHAVIORFACTORY    = $00000400;
 DOCHOSTUIFLAG_CODEPAGELINKEDFONTS        =$00000800;
 DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8  = $00001000;
 DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8   = $00002000;
 DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE  = $00004000;
 DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION  = $00010000;
 DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION    = $00020000;
 DOCHOSTUIFLAG_THEME                      =$00040000;
 DOCHOSTUIFLAG_NOTHEME                    =$00080000;
 DOCHOSTUIFLAG_NOPICS                     =$00100000;
 DOCHOSTUIFLAG_NO3DOUTERBORDER            =$00200000;
 DOCHOSTUIFLAG_DISABLE_EDIT_NS_FIXUP