VS2008/VB.net - Webbrowser Control, PopUp abfangen/umleiten

Grisu786

Grünschnabel
Hallöchen :)

Ich arbeite an einem Tool mit dem man unter anderem auch auf diverse Websiten zugreifen kann. Einige dieser Webseiten öffnen über Links Internetseiten in einem neuen Fenster.

Dieses möchte ich unterbinden und die zu öffnenden Seiten statt in einem neuen Fenster in einem eigenen Browserelement meines Tools anzeigen lassen.

Das PopUp an sich durch behandeln des NewWindow Ereignis mit e.cancel=true zu verhindern ist ja nu keine Hexerei.


Beispiel:

PHP:
 Private Sub webB_NewWindow(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles webB.NewWindow

        Try

            e.Cancel = True

        Catch ex As Exception

            ErrorManagement(ex)

        End Try

    End Sub

Das bringt mich aber nicht wirklich weiter da ich nicht an die Internetseite rankomme die in dem Fenster hätte geöffnet werden sollen.

Jemand ne Idee wie ich das realisieren kann?


Oder vielleicht gibts ne andere Lösung, wodurch ich mir das mit den Popups sparen kann^^ In meinem Tool gibt es absichtlich keine Möglichkeit eine eigene URL aufzurufen (aus sicherheitsgründen). Findige Leute haben die Möglichkeit entdeckt das WebbrowserControl in meinem Tool von außen "fernzusteuern", indem sie einen Link einer Seite in einem neuen Fenster öffnen lassen, und dann über "opener.location.href = neuer link" das webcontrol meines tools anweisen zu einer speziellen seite zu navigieren. Dadurch sind sie in der Lage Bots zu schreiben, und das mit rel. wenig Aufwand.

Gibt es eine Möglichkeit das zu unterbinden. Das neue Fenster müsste ja theoretisch ein child von meinem webbrowsercontrol sein. Da müsste sich doch der zugriff auf das parent durch das child abfangen lassen....

Schonmal Danke für jeden der sich die Mühe Macht sich den Text zumindest durchzulesen *g*

Liebe Grüße, Grisu
 
Habe ich getan. Die werden nicht ausgelöst das sie nur die Navigation meines WebBrowser-Controls betreffen. Und das navigiert nun mal nicht, sondern das neue Fenster.


Für VB gibts folgende Möglichkeit:

Code:
Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)

Dim Form2 As New Form1 'Neues Browserfenster erstellen

Set ppDisp = Form2.WebBrowser1.object 'Display-Objekt neue Form zuweisen
Form2.WindowState = vbMaximized '<--- Wenigstens ein Bug weniger...
Form2.Show 'Und anzeigen...

End Sub

Leider so unter vb.net nicht machbar. Aber irgend ne Möglichkeit muss es doch geben *grml*


Habs auch über subclassing versucht, aber auch da komme ich nicht an die url des neuen zielfensters ran *seufz*
 
Also, hallo erstmal...

Wenn ich das richtig verstanden habe, willst du dass unter VB 2008 machen...

ich bin mir nicht sicher, aber wenn du in dem NewWindowCancel-Event-Handle die URL des neuen Fensters nicht findest (was ich glaube) ist es so, dass dein Vorhaben afaik nicht möglich ist - zumindest nicht mit dem "BuildIn"-WebBrowser-Control...

Zum Glück sind wir Programmierer ja nie allein und es gab schon mal jemand mit deinem Problem - und er hat ein besseres WebBrowser-Control geschrieben, welches du hier findest und das genau dein Problem löst - oder es zumindest sollte: http://www.codeproject.com/KB/cpp/ExtendedWebBrowser.aspx

Wenn du noch Fragen hast, frag - ich versuch dir zu helfen, auch wenn ich mittlerweile auf C++/Qt umgestiegen bin und unter den .NET-Sprachen C# bevorzuge... :) - und wenn du garnicht damit zurecht kommst, kann ich dir auch schnell ein Beispiel schreiben... ;)

lG julian

EDIT:

Solltest du eine Darstellung in Tab's wollen (so wie z.B. FF, IE7, etc.) google entweder nach "Tabbed MDI" oder frag mich einfach hier... :)
 
Zuletzt bearbeitet:
Hallo Grisuchen,
probier’s mal damit in den Event-Handlern "Navigating" und/oder "NewWindow" des Web-Controls unter VB 2008 (und nur da):

Code:
Private ZZZ_NewWindow(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles xBrowserFenster.NewWindow
  
  Dim XXX As WebBrowser
  Dim YYYl As String
  
  XXX = sender
  YYY = XXX.StatusText
  
  ' Hier kommt dann der Code hin, welcher mit der Varibale YYY
  ' den neuen Url an einen Browser übergibt,  zB an deinen schöneren
  
  e.Cancel = True
  XXX = Nothing
  
 End Sub


Quick auch so:
Code:
Sub ZZZ_NewWindow(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles xBrowserFenster.NewWindow

Call XYZ(sender.statustext)
e.Cancel = True

End Sub

C. Stein
 
Zurück