2013-10-08 16 views
6

Questo è per un desktop C# app in Visual Studio Express 2012.browser web sito timeout

Sto usando un controllo WebBrowser per accedere ai vari siti web, ma trovare un po 'non rispondono e timeout.

Ho il sospetto che possa trattarsi del controllo WebBrowser che esegue intrinsecamente IE7 ma che i siti Web funzionano correttamente su un vecchio PC che esegue IE7 come browser nativo. C'è qualcosa in webBrowser che devo impostare per consentire a un sito Web come quello nel codice qui sotto di elaborare le risposte?

Il codice seguente consente di accedere a un sito Web con cui ho problemi. Se si immettono valori per Login e Password in un browser nativo, esso risponde immediatamente e genera un errore, ma in un browser Web si trova lì in attesa di una risposta ed eventualmente di timeout.

Qualsiasi aiuto sarebbe molto apprezzato!

Mick

namespace WindowsFormsApplication11 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      webBrowser1.Navigate(
       "https://www.my.telstra.com.au/myaccount/home?red=/myaccount/"); 
     } 
    } 
} 
+1

in considerazione l'attuazione [di controllo delle caratteristiche del browser web] (http://stackoverflow.com/a/18802626/1768303) in base al comportamento di IE. – Noseratio

+1

Grazie mille Noseratio - ha funzionato un fascino per questo particolare sito! Continuerò a testare ora su altri siti web. Ecco la versione completa funzionante del codice. Nota: è possibile utilizzare Windows regedit per verificare le impostazioni del registro eseguite da questo programma (non ho idea di quale combinazione abbia risolto il problema): –

risposta

0

Ecco il codice di lavoro completo:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using Microsoft.Win32; 
using System.Diagnostics; 



namespace WindowsFormsApplication11 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      SetBrowserFeatureControl(); 

      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      webBrowser1.Navigate("https://www.my.telstra.com.au/myaccount/home?red=/myaccount/"); 

     } 

     private void SetBrowserFeatureControlKey(string feature, string appName, uint value) 
     { 
      using (var key = Registry.CurrentUser.CreateSubKey(
       String.Concat(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\", feature), 
       RegistryKeyPermissionCheck.ReadWriteSubTree)) 
      { 
       key.SetValue(appName, (UInt32)value, RegistryValueKind.DWord); 
      } 
     } 
     private void SetBrowserFeatureControl() 
     { 
      // http://msdn.microsoft.com/en-us/library/ee330720(v=vs.85).aspx 

      // FeatureControl settings are per-process 
      var fileName = System.IO.Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName); 

      // make the control is not running inside Visual Studio Designer 
      if (String.Compare(fileName, "devenv.exe", true) == 0 || String.Compare(fileName, "XDesProc.exe", true) == 0) 
       return; 

      SetBrowserFeatureControlKey("FEATURE_BROWSER_EMULATION", fileName, GetBrowserEmulationMode()); // Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. 
      SetBrowserFeatureControlKey("FEATURE_AJAX_CONNECTIONEVENTS", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_MANAGE_SCRIPT_CIRCULAR_REFS", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_DOMSTORAGE ", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_GPU_RENDERING ", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI ", fileName, 0); 
      SetBrowserFeatureControlKey("FEATURE_NINPUT_LEGACYMODE", fileName, 0); 
      SetBrowserFeatureControlKey("FEATURE_DISABLE_LEGACY_COMPRESSION", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_LOCALMACHINE_LOCKDOWN", fileName, 0); 
      SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_OBJECT", fileName, 0); 
      SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_SCRIPT", fileName, 0); 
      SetBrowserFeatureControlKey("FEATURE_DISABLE_NAVIGATION_SOUNDS", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_SCRIPTURL_MITIGATION", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_SPELLCHECKING", fileName, 0); 
      SetBrowserFeatureControlKey("FEATURE_STATUS_BAR_THROTTLING", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_TABBED_BROWSING", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_VALIDATE_NAVIGATE_URL", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_WEBOC_DOCUMENT_ZOOM", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_WEBOC_POPUPMANAGEMENT", fileName, 0); 
      SetBrowserFeatureControlKey("FEATURE_WEBOC_MOVESIZECHILD", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_ADDON_MANAGEMENT", fileName, 0); 
      SetBrowserFeatureControlKey("FEATURE_WEBSOCKET", fileName, 1); 
      SetBrowserFeatureControlKey("FEATURE_WINDOW_RESTRICTIONS ", fileName, 0); 
      SetBrowserFeatureControlKey("FEATURE_XMLHTTP", fileName, 1); 
     } 

     private UInt32 GetBrowserEmulationMode() 
     { 
      int browserVersion = 7; 
      using (var ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer", 
       RegistryKeyPermissionCheck.ReadSubTree, 
       System.Security.AccessControl.RegistryRights.QueryValues)) 
      { 
       var version = ieKey.GetValue("svcVersion"); 
       if (null == version) 
       { 
        version = ieKey.GetValue("Version"); 
        if (null == version) 
         throw new ApplicationException("Microsoft Internet Explorer is required!"); 
       } 
       int.TryParse(version.ToString().Split('.')[0], out browserVersion); 
      } 

      UInt32 mode = 10000; // Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10. 
      switch (browserVersion) 
      { 
       case 7: 
        mode = 7000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control. 
        break; 
       case 8: 
        mode = 8000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8 
        break; 
       case 9: 
        mode = 9000; // Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9. 
        break; 
       default: 
        // use IE10 mode by default 
        break; 
      } 

      return mode; 
     } 



    } 
} 
+0

Potrebbe non essere necessario tutte queste funzionalità.Suggerirei di iniziare con 'FEATURE_BROWSER_EMULATION', di solito è sufficiente. – Noseratio

1

ho lavorato spesso con il WenBrowserControl e non mi ricordo nemmeno una volta non ho avuto alcun problema particolare con il browermode del controllo. In seguito sono stati alcuni passaggi che mi hanno aiutato risolvere molti di questi problemi:

1) Forza l'applicazione per utilizzare le impostazioni di InternetExplorer: In primo luogo vi consiglio di provare l'aggiunta di una chiave di registro per l'applicazione sotto

HKLM\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 

e

HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION` 

con il valore 9000 che costringe il controllo nella vostra applicazione per utilizzare le impostazioni di IE9. Here puoi trovare la domanda che mi ha portato a questa soluzione. È descritto molto dettagliatamente lì.

2) Impostazioni in Internet Explorer: Il problema di timeout mi sembra come se alcune funzionalità di sicurezza di IE stessero bloccando qualcosa. A mio parere Internet Explorer ha un certo numero di regolamenti riguardanti il ​​contenuto dei siti web. Prova ad aggiungere i siti web che scadono per i siti protetti sotto le Internet Settings di IE. Prova anche a ridurre le funzionalità di sicurezza/bloccate dei siti sicuri.

Per favore fatemi sapere se ne avete ancora.

+0

Grazie a colosso, vorrei provare le impostazioni in Internet Explorer come suggerito ma come fare lo fai in un controllo webBrowser? –

+0

Non esiste alcuna possibilità di effettuare le impostazioni nel controllo stesso. Ma il controllo è basato su Internet Explorer. Se modifichi le impostazioni in IE, il tuo controllo applicherà queste impostazioni a se stesso. – colosso