2012-04-11 43 views
6

我想阻止iframe元素每次觸發OnDocumentComplete事件。例如,一個頁面有4個iframe,當我加載這個頁面時,我的OnDocumentComplete事件運行4次。我想爲每個頁面運行OnDocumentComplete一次。我怎樣才能做到這一點?如何避免嵌入式iframe元素的OnDocumentComplete事件?

也許我可以在TWebBrowser控件中刪除或阻止iframes

+0

我希望你的意思是隱藏,而不是刪除。所以['here']](http://www.delphidabbler.com/tips/56)你有如何找到一個元素,並找到元素嘗試設置'Element.Style:='visibility:hidden;''。 – TLama 2012-04-11 11:52:25

+0

其實我想阻止他們每次運行OnDocumentComplete事件。例如;頁面有4個iframe,當我加載這個頁面OnDocumentComplete事件運行4次。我想爲每個頁面運行一次OnDocumentComplete。 – Leadri 2012-04-11 11:59:12

回答

14

在主文檔中爲每個FRAME/IFRAME發起事件OnDocumentComplete
如果你想忽略他們試試這個:

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; 
    const pDisp: IDispatch; var URL: OleVariant); 
begin 
    // check that the event is raised for the top-level browser (not frames or iframes) 
    if pDisp = TWebBrowser(Sender).ControlInterface then 
    begin 
    // do something nice... 
    end; 
end; 

德爾福文檔:

寫一個OnDocumentComplete事件處理採取具體行動時,一幀或文檔被完全加載到網頁瀏覽器。對於沒有框架的文檔,當文檔加載完成後,會發生一次該事件。在包含多個幀的文檔上,每個幀都會發生一次該事件。多幀文檔加載完成後,Web瀏覽器最後一次觸發事件。

發件人是加載文檔的Web瀏覽器。

pDisp是頂級框架或瀏覽器的自動化接口。 加載沒有框架的文檔時,pDisp是網頁瀏覽器的界面。當加載具有多個框架的文檔時,這是包含框架的界面,除了發生最後一次 事件時,它是Web瀏覽器的界面。

+5

+1,我永遠不會考慮這個。太好了! – TLama 2012-04-11 12:19:54

+1

它的工作原理。非常感謝你。 – Leadri 2012-04-11 12:24:53

+1

將是一個很好的實用函數'InterfaceCompare(x:IDispatch; aObject:TObject)',它包裝了那個大的IF語句。 – 2012-04-11 17:38:24