Personalizar una descarga del Control WebBrowser

Iniciado por **Aincrad**, 25 Enero 2019, 18:46 PM

0 Miembros y 2 Visitantes están viendo este tema.

**Aincrad**

Tengo una duda, Como prodria hacer q no aparezca el cuadro de dialogo de descarga del control.
y obtener la url de esa descarga??.





Eleкtro

#1
Para cancelar la descarga de archivos puedes utilizar la interfaz 'ShellBrowserWindow' de la librería COM 'shdocvw.dll', ubicada en el directorio 'C:\Windows\System32'.

Para obtener la url de descarga, puedes leer el atributo 'href' del elemento HTML activo. Supongo que esto funcionará siempre así... aunque no me atrevo a asegurarlo al 100% ya que no domino de forma avanzada la programación HTML.

En fin. Para usar el siguiente código de ejemplo, primero añade una referencia a la librería que he mencionado... no te pase como la última vez  :¬¬ xD. Aquí tienes:

Código (vbnet) [Seleccionar]
Public NotInheritable Class Form1 : Inherits Form

   Private WithEvents ShellWebBrowser1 As SHDocVw.ShellBrowserWindow

   Public Sub New()
       MyClass.InitializeComponent()
       Me.WebBrowser1.ScriptErrorsSuppressed = True
   End Sub

   Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Shown
       ' Sitio web con varias descargas de archivos zip...
       Me.WebBrowser1.Navigate("https://www.thinkbroadband.com/download")
   End Sub

   Private Sub WebBrowser1_VisibleChanged(ByVal sender As Object, ByVal e As EventArgs) Handles WebBrowser1.VisibleChanged

       ' Importante: no trasladar este código al método "Form1_Load"...

       Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
       If (wb.Visible) AndAlso (Me.ShellWebBrowser1 Is Nothing) Then
           Me.ShellWebBrowser1 = DirectCast(wb.ActiveXInstance, SHDocVw.ShellBrowserWindow)
       End If

   End Sub

   Private Sub ShellWebBrowser1_FileDownload(ByVal activeDocument As Boolean, ByRef cancel As Boolean) Handles ShellWebBrowser1.FileDownload
       ' Cancelar descarga de archivo...
       cancel = True

       ' Obtener la url de descarga...
       Dim href As String = Me.WebBrowser1.Document.ActiveElement.GetAttribute("href")
       Console.WriteLine(href)
   End Sub

End Class


Nótese que esto no impedirá poder seguir usando el menú contextual para descargar un archivo mediante la opción "Guardar destino como..."

Si quieres impedir la descarga mediante el menú contextual, puedes crear tu propio menú y asignarlo a la propiedad WebBrowser1.ContextMenuStrip, o bien puedes suscribirte al evento HtmlDocument.ContextMenuShowing para cancelar la aparición del menú. Un ejemplo minificado:

Código (vbnet) [Seleccionar]
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
   Dim wb As WebBrowser = DirectCast(sender, WebBrowser)

   AddHandler wb.Document.ContextMenuShowing,
       Sub(ByVal browser As Object, ByVal args As HtmlElementEventArgs)
           args.ReturnValue = False
       End Sub
End Sub


Saludos.








**Aincrad**

Como Evito que aparezca el cuadro de dialogo al activarse la descarga?,

No me da lo que contiene el href . la pagina es la siguiente https://www.convertmp3.io/widget/button/?video=https://www.youtube.com/watch?v=KhPNuBi8pJM puedes inspeccionarla.





Eleкtro

Puedes obtener el enlace de descarga al menos de estas dos formas...

1:
Código (vbnet) [Seleccionar]
Me.WebBrowser1.Document.GetElementById("downloadButton").GetAttribute("href")

2:
Código (vbnet) [Seleccionar]
Me.WebBrowser1.Document.Body.FirstChild.GetAttribute("href")

saludos