Naja das Problem ist, dass die Lösung wirklich nicht sehr elegant ist, aber ich werde sie Mitteilen... vielleicht hat ja noch jemand eine andere, bessere Idee.
Man nutzt dazu einen zweiten, gehideten TWebbrowser.
Im NewWindow Event des ersten Webbrowsers wird dann die Anzeige
des neuen Fensters an den zweiten Webbrowser übergeben, damit
man die
URL des neuen Fensters bekommen kann.
Code:
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
ppDisp := WebBrowser2.Application;
end;
Beim BeforeNavigate Event des 2ten WebBrowsers wird dann die Browser exe n
och mal gestartet und dabei die
URL übergeben. Und auch der Browsvorgang des
2ten Webbrowser abgebrochen.
Code:
procedure TForm1.WebBrowser2BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var
URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
var newinstance : STRING;
BEGIN
newinstance :=
url;
url := '';
cancel := TRUE;
ShellExecute(
handle,'open',Pchar(paramstr(0)),Pchar(newinstance),'',SW_SHOWNORMAL);
END;
Zum Schluss muss man noch in den FormCreate Event, die Übernahme der
Url einfügen:
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
if paramstr(1) <> '' then webbrowser1.Navigate(paramstr(1));
webbrowser2.Hide;
end;