2012-04-11 15 views
6

Voglio impedire che gli elementi iframe attivino l'evento OnDocumentComplete ogni volta. Ad esempio, una pagina ha 4 iframe e quando carico questa pagina, il mio evento OnDocumentComplete viene eseguito 4 volte. Voglio eseguire OnDocumentComplete solo una volta per ogni pagina. Come lo posso fare?Come evitare l'evento OnDocumentComplete per gli elementi iframe incorporati?

Forse potrei rimuovere o bloccare iframes nel controllo TWebBrowser.

+0

Spero che intendiate nascondere, non rimuovere. Quindi ['here'] (http://www.delphidabbler.com/tips/56) hai come trovare un elemento e sull'elemento trovato prova a impostare' Element.Style: = 'visibility: hidden;'. – TLama

+0

In realtà, voglio impedire loro di eseguire l'evento OnDocumentComplete ogni volta. Per esempio; la pagina ha 4 iframe e quando carico questa pagina, l'evento OnDocumentComplete viene eseguito 4 volte. Voglio eseguire OnDocumentComplete solo una volta per ogni pagina. – Leadri

risposta

14

L'evento OnDocumentComplete viene generato per ogni FRAME/IFRAME nel documento principale.
Se si desidera ignorarli provare questo:

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; 

da Delphi Documenti:

scrivere un gestore di eventi OnDocumentComplete di adottare misure specifiche quando un frame o un documento è completamente caricato nel Programma di navigazione in rete. Per un documento senza frame, questo evento si verifica una volta al termine del caricamento del documento. Su un documento contenente più frame, questo evento si verifica una volta per ogni frame. Al termine del caricamento del documento con più frame, il browser Web attiva l'evento per l'ultima volta.

Mittente è il browser Web che sta caricando il documento.

pDisp è l'interfaccia di automazione del frame o del browser di livello superiore. Quando si carica un documento senza frame, pDisp è l'interfaccia del browser Web . Quando si carica un documento con più frame, questa è l'interfaccia del frame contenente, fatta eccezione per l'ultima volta che si verifica l'evento , quando è l'interfaccia del browser.

+5

+1, non ci penserei mai. Bello! – TLama

+1

funziona. Grazie mille. – Leadri

+1

Sarebbe una bella funzione di utilità 'InterfaceCompare (x: IDispatch; aObject: TObject)' che avvolge quella grande istruzione IF. –