2012-08-14 207 views
0

我正在開發IE瀏覽器BHO來拒絕某些特定的URL。當我找到一個目標網址時,我想在顯示警告的網頁上方打開一個iframe。要查找用戶的URL,我正在使用BeforeNavigate2事件。當我找到目標網址時,我會創建iframe。所以現在的代碼是:將IE瀏覽器插入IE瀏覽器BHO

procedure DoBeforeNavigate2(
       const pDisp: IDispatch; 
       var URL: OleVariant; 
       var Flags: OleVariant; 
       var TargetFrameName: OleVariant; 
       var PostData: OleVariant; 
       var Headers: OleVariant; 
       var Cancel: WordBool 
       ); 
var 
Document: IHTMLDocument2; 
iFrame: IHTMLElement; 
begin 
    Document:= IE.Document as IHTMLDocument2; 
    iFrame:= Document.createElement('iframe'); 
    iFrame.setAttribute('src', 'http://www.google.com/', 0); 
    iFrame.setAttribute('id', 'iFrame', 0); 
    iFrame.setAttribute('style', 'position: fixed; left: 0px; top: 0px; border: 0px; width: 100%; height: 100%; background-color: white', 0); 
end; 

它應該打開與google.com的iframe所有網站之上,但它只是崩潰IE瀏覽器...有人可以幫助,我解決這個感謝的!

回答

1

該頁面尚未加載在BeforeNavigate2。您可以嘗試在DocumentComplete中執行此操作。將IWebBrowser2對象存儲在您的BHO的SetSite方法中,並檢查pDisp是否是同一個對象(首先從QI到IWebBrowser2)以驗證該頁面是否正在加載到主瀏覽器窗口(而不是框架)中。然後,您應該能夠像當前代碼一樣注入iframe。我不知道Delphi,所以也許這就是爲什麼我不明白IE.Document是什麼,但是您應該使用IWebBrowser2對象的Document屬性。