Entwickler-Ecke

Internet / Netzwerk - TWebBrowser und neue Fenster


elinox - Mi 18.09.02 11:41
Titel: TWebBrowser und neue Fenster
Hi !


Kann man TWebBrowser eigendlich irgendwie austreiben das er bei einem Link ( HTML ) der eine neues Fenster aufmacht das selbige dann auch tut??!?

Also nochmal genauer wenn ich auf einer HTML-Seite einem Link einbinde und als Target "_blank" angebe dann sagt das dem Browser das er den link in einem neuen Browserfenster aufmachen soll ... und ich will das TWebBrowser das eben nicht macht.

Meine Ideen gingen bisher dahin das ich "einfach" die Seite durch einen Filter laufen lasse bevor ich sie anzeigen lasse ... aber wie macht man das ??

Schon mal Danke für die hoffentlich vielen vielen antworten ... grins .

ELinOX


Estoban - Mi 02.10.02 10:23
Titel: Kein neues Fenster
Ich habe mir bei der EmbeddedWB-Komponente so geholfen so geholfen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TFUrls.EmbeddedWB1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
TargetFrameName := '_SELF';
EmbeddedWB1.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
end;

procedure TFUrls.EmbeddedWB1NewWindow2(Sender: TObject; var ppDisp: IDispatch;
  var Cancel: WordBool);
  var NewWindow:TForm1;
begin
 try
 NewWindow := TForm1.Create(self);
  with NewWindow do
  ppDisp := (Sender as TEmbeddedWB).DefaultDispatch;
  NewWindow.free;
  except
  end;
end;

Bei mir klappt das. Sollte jemand eine elegantere Idee haben, wäre ich aber auch daran interessiert.

Gruß
Estoban


kuerbis2 - Mo 02.12.02 09:04
Titel: Kitel: Kein neues Fenster
Hi,

ich habe ein ähnliches Problem. Wenn ich aber gar kein Fenster öffnen will, dann ist die eleganteste Lösung richtig simpel:

Ereigniss: OnNewWindow:

procedure TMainForm.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
cancel:=true; // das war's ;-)
end;

aber dann geht gar kein Fenster auf.

ich hätte aber gerne ein neues Fenster, jedoch nicht vom IE, sondern in meinem "eigenen" Browser, doch wie komme ich an die übergebene URL?


matze - Mo 02.12.02 16:06

schau dir doch mal das tut hier im forum an: http://www.auq.de/viewtopic.php?t=57


Kaweb - Do 05.12.02 18:34

Zitat:

Ereigniss: OnNewWindow:

procedure TMainForm.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
cancel:=true; // das war's
end;


Das funktioniert nicht! Muss man irgendwoanders noch eine Einstellungen machen??


kuerbis2 - Do 05.12.02 18:59

bei mir funzt's. probier's mal mit der seite

[url]http://www.bitsol.de/startup.html[/url] (ist Flash5)

da mache ich bei Klick def. ein neues Fenster auf.


sonst habe ich keine (mir noch bekannten) einstellungen vorgenommen.
ich kann Dir ja mal meine "main.pas" rüberschicken,
da ist dann auch die Lösung drin, Laufwerke, lokaler Zugriff etc. zu verbieten und bei "_blank" einen neuen TWebBrowser zu öffnen. Außerdem ist die rechte Maus (für std-IE-funktionen) abgeschaltet.


Kaweb - Do 05.12.02 20:06
Titel: geschafft ...
ich habe es jetzt geschafft.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
uses MSHTML;

procedure Tmain_form.WebBrowser_v11NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
var
 Doc: IHTMLDocument2;
 S: string;
 varUrl: string;
 x:olevariant;
begin
 x := 0;
 begin
   Cancel := True;
   Doc := IHTMLDocument2(TWebBrowser(Sender).Document);
   S := Copy(Doc.activeElement.outerHTML,
        pos('href=', Doc.activeElement.outerHTML) + 5,
        length(Doc.activeElement.outerHTML) -
        pos('href=', Doc.activeElement.outerHTML) + 5);

   S := Copy(S, 0, pos('>', S) - 1);

   if pos('"', S) = 1 then
      S := Copy(S, 2, Length(S) - 16);

   varURL := S;
   WebBrowser_V11.Navigate(varURL,x,x,x,x);
 end;
end;


thx für eure hilfe!!