2012-04-11 15 views
6

Chcę uniemożliwić zdarzenie iframe wyzwalania zdarzenia OnDocumentComplete. Na przykład strona ma 4 ramki iframe, a po załadowaniu tej strony moje wydarzenie OnDocumentComplete działa 4 razy. Chcę uruchomić OnDocumentComplete tylko raz dla każdej strony. Jak mogę to zrobić?Jak uniknąć zdarzenia OnDocumentComplete dla elementów osadzonych elementów iframe?

Może mogę usunąć lub zablokować iframes w kontrolce TWebBrowser.

+0

Mam nadzieję, że masz na myśli schowanie, a nie usunięcie. Więc ['here'] (http://www.delphidabbler.com/tips/56) umiesz znaleźć element i na znalezionym elemencie spróbuj ustawić" Element.Style: = 'visibility: hidden;' '. – TLama

+0

Właściwie chcę uniemożliwić im uruchamianie zdarzenia OnDocumentComplete za każdym razem. Na przykład; strona ma 4 ramki iframe, a kiedy ładuję tę stronę zdarzenie OnDocumentComplete działa 4 razy. Chcę uruchomić OnDocumentComplete tylko raz dla każdej strony. – Leadri

Odpowiedz

14

Zdarzenie jest uruchamiane dla każdego dokumentu FRAME/IFRAME w dokumencie głównym.
Jeśli chcesz ignorować ich spróbować tego:

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; 

z Delphi Docs:

napisz OnDocumentComplete obsługi zdarzeń do podjęcia konkretnych działań, gdy ramka lub dokument jest w pełni załadowany do Przeglądarka internetowa. W przypadku dokumentu bez ramek to zdarzenie występuje raz, gdy dokument się kończy. W dokumencie zawierającym wiele ramek zdarzenie to występuje raz dla każdej klatki. Po zakończeniu ładowania dokumentu z wieloma ramkami przeglądarka internetowa uruchamia zdarzenie po raz ostatni.

Nadawca to przeglądarka internetowa ładująca dokument.

pDisp to interfejs automatyzacji ramki lub przeglądarki najwyższego poziomu. Podczas ładowania dokumentu bez ramek, pDisp jest interfejsem przeglądarki WWW . Podczas ładowania dokumentu z wieloma ramkami jest to interfejs ramki zawierającej, z wyjątkiem ostatniego wystąpienia zdarzenia , gdy jest to interfejs przeglądarki internetowej.

+5

+1, nigdy bym o tym nie pomyślał. Miły! – TLama

+1

to działa. Dziękuję Ci bardzo. – Leadri

+1

Byłaby miłą funkcją użyteczną 'InterfaceCompare (x: IDispatch; aObject: TObject)', która owija tak dużą instrukcję IF. –