2009-04-20 8 views
1

Je travaille sur un webcrawler dans VB.net, et en utilisant l'objet System.Forms.WebBrowser pour gérer la navigation sur les sites qui utilisent javascript ou des messages de formulaire, mais j'ai un problème. Lorsque je navigue à reculons (WebBrowser.GoBack()) vers une page qui a été chargée avec un message de formulaire, la page a expiré et je dois effectuer une actualisation pour renvoyer la demande. Lorsque j'appelle un rafraîchissement (WebBrowser.Refresh()), une boîte de dialogue apparaît pour confirmer. Est-ce que je peux contourner ce dialogue modal dans le code? Merci!WebBrowser.Refresh problème dans VB.Net

+0

Je devrais aussi ajouter que j'ai essayé d'utiliser WebBrowserRefreshOptions (Normal, Complete, IfExpired) sans succès. –

Répondre

2

Vous pouvez transmettre une option d'actualisation de type System.Windows.Forms.WebBrowserRefreshOption.

Il y a plusieurs options, décrites ici:
http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowserrefreshoption.aspx

Il semble que les options sont la seule façon que vous pouvez contrôler une actualisation du navigateur Web par programme.

+0

J'aurais dû mentionner que j'ai essayé cela, avec les options IfExpired et Completely sélectionnées, ainsi que l'actualisation sans paramètre qui, je crois, est la même que Normal. Je vois toujours des invites de rafraîchissement –

1

J'ai eu un problème similaire avec un popup apparaissant avec un avertissement javascript. J'ai réussi à le supprimer en utilisant un événement window_error.

J'ai ajouté cette ligne au gestionnaire d'événements browser_completed:

((WebBrowser)sender).Document.Window.Error += 
    new HtmlElementErrorEventHandler(Window_Error); 

Voici mon gestionnaire d'événements window_error:

void Window_Error(object sender, HtmlElementErrorEventArgs e) 
{ 
    e.Handled = true; 
} 

Une autre option de penser à jongle autour avec this._browser.ScriptErrorsSuppressed. Je suis sûr que vous n'obtenez pas d'erreur de script, mais ça vaut le coup.

0

J'ai trouvé une solution de contournement/hack pour remédier à ce problème ici: http://www.experts-exchange.com/Programming/Languages/.NET/Q_25160302.html

Fondamentalement, vous le faites comme ceci:

Browser.Refresh(WebBrowserRefreshOption.Completely); 
SendKeys.Send("{Enter}"); 

La ligne SendKeys.Send("{Enter}"); envoie une touche Entrée pour fenêtre active, qui est le dialogue modal dont nous voulons nous débarrasser.