2009-03-31 12 views
9

Necesito usar el navegador web en mi aplicación, ya que mantiene las tareas repetitivas de los empleados, pero hay un problema con javascript que abre una nueva ventana en IE después de hacer clic en el ancla. ¿Cómo le digo al control del navegador web "abrir nueva ventana" donde quiero que se abra? Por ejemplo, en el otro control de navegador web?Cómo forzar el control del navegador web para que siempre abra la página web en la misma ventana?

+0

Estoy interesado en la respuesta a esto. Pero, ¿no debería el componente informar a su aplicación que se abrirá una nueva ventana? Debería abrir la nueva ventana con un nuevo componente WebBrowser. Tal vez hay un evento? –

+0

Lamentablemente, el ancla es el enlace "javascript: void (0)". No sé cómo resolver este – Skuta

+0

He editado mi publicación – abatishchev

Respuesta

5

Salida: proof-of-concept of .NET System.Windows.Forms.WebBrowser module using código fuente


Mi experiencia acerca de que los controles me ha dado una visión de que este problema puede intentado resolver en los siguientes pasos:

  1. siempre cancelar NewWindow evento

  2. captura all links clicando

  3. pero no todos enlace se puede almacenar en caché de esta manera, por lo que decidió analizar todas las etiquetas <a> manualmente en Document Loading Completion

  4. en general, este control es muy pobre y se ha hecho de manera deliberada por parte de Microsoft. aunque no es poderoso conjunto de herramientas en torno Webrowser.Document.HtmlDocument y espacio de nombres MSHTML

  5. un ejemplo de que está usando es HtmlElement.DomElement

    foreach(HtmlElement tag in webBrowser.Document.All)   
    { 
        switch (tag.TagName.ToUpper) 
        { 
        case "A": 
        { 
         tag.MouseUp += new HtmlElementEventHandler(link_MouseUp); 
         break; 
        } 
        } 
    } 
    
    void link_MouseUp(object sender, HtmlElementEventArgs e) 
    { 
        HtmlElement link = (HtmlElement)sender; 
        mshtml.HTMLAnchorElementClass a = (mshtml.HTMLAnchorElementClass)link.DomElement; 
        switch (e.MouseButtonsPressed) 
        { 
        case MouseButtons.Left: 
        { 
         if ((a.target != null && a.target.ToLower() == "_blank") || 
          e.ShiftKeyPressed || 
          e.MouseButtonsPressed == MouseButtons.Middle) 
         { 
         // add new tab 
         } 
         else 
         { 
         // open in current tab 
         } 
         break; 
        } 
        case MouseButtons.Right: 
        { 
         // show context menu 
         break; 
        } 
        } 
    } 
    

Ver más en el primer eslabón, que es el código fuente de la ventana principal, hay una muchas manipulaciones diferentes allí!

+0

y ¿cómo puedo insertar esto en mi aplicación? – Skuta

+0

dotbrowser No funciona con javascript, shiat – Skuta

+0

cool, existe la URL en A, pero tendría que analizarla porque es parte de onclick !!! ESTUPENDO. GRACIAS – Skuta

-1

Hay un error en el caso MouseBUttons.Left:

de error 1 El control no puede caer a través de una etiqueta de la caja ('caso 1048576:') a otro C: \ Documents and Settings \ jamás \ Mis documentos \ Visual Studio 2005 \ Projects \ Desarrollo \ wApp_SurverMonkey \ wApp_SurverMonkey \ frmNetcare.cs 64 17 wApp_SurverMonkey

0

Por qué una respuesta tan compleja chicos? Abatischev, tengo curiosidad de ver dentro de su cerebro, debe ser interesante ...

Intenta esto:

Private Sub WB1_NewWindow(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles WB1.NewWindow 
    newUrl = WB1.Url.ToString 

    e.Cancel = True 
    WB1.Navigate(newUrl) 
End Sub 

Ahora usted puede cambiar la segunda línea en WB2 o cualquier otro componente WebBrowser en cualquier de tus PROPIOS formas

15

Encontré una solución simple que funciona.

private void WebBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e) { 
    e.Cancel = true; 
    WebBrowser1.Navigate(WebBrowser1.StatusText); 
} 
+0

Esto me ayudó mucho, muchas gracias. –

+0

Gracias, Este código funciona bien (VS 2015, C#). No hay una nueva ventana ahora. Fácil de usar y el fragmento es pequeño. – user2422690

+0

Solución brillante. Gracias Sam. – Neophile

Cuestiones relacionadas