2013-10-08 7 views
6

Это для # приложение Desktop C в Visual Studio Express 2012WebBrowser сайт таймаут

Я использую элемент управления WebBrowser для входа на различные сайты, но найти некоторые не отвечают и тайм-аут.

Я подозревал, что это может быть элемент управления webBrowser, который использует IE7, но обнаружил, что веб-сайты отлично работают на старом ПК, работающем под IE7, в качестве собственного браузера. Есть ли что-то в веб-браузере, которое мне нужно настроить для того, чтобы веб-сайт, такой как тот, в коде ниже, обрабатывал ответы?

Код ниже перемещается на сайт, с которым я столкнулся. Если вы вводите любые значения для Login и Password в своем родном браузере, он сразу же отвечает и выдает ошибку, но в webBrowser он сидит там, ожидая ответа и, в конце концов, отключается.

Любая помощь была бы принята с благодарностью!

Мик

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

Рассмотрим реализацию [WebBrowser контроль функции] (http://stackoverflow.com/a/18802626/1768303), чтобы соответствовать поведение IE. – Noseratio

+1

Thankyou so much Noseratio - это сработало очарование для этого конкретного сайта! Сейчас я буду тестировать другие сайты. Вот полная рабочая версия кода. Примечание. Вы можете использовать Windows regedit для проверки настроек реестра, сделанных этой программой (я не знаю, какая из них исправлена): –

ответ

0

Вот полный рабочий код:

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

Возможно, вам не нужны все эти функции.Я предлагаю начать с 'FEATURE_BROWSER_EMULATION', обычно этого достаточно. – Noseratio

1

Я часто работал с WenBrowserControl и не могу вспомнить хотя бы один раз, у меня не было никаких проблем, особенно с browermode контроля. После были некоторые шаги, которые помогли мне решить многие из этих проблем:

1) Принудительное применение использовать настройки InternetExplorer: Сначала я предлагаю вам попробовать добавить ключ реестра для приложения под

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

и

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

со значением 9000, которая заставляет управление в вашем приложении, чтобы использовать настройки IE9. Here вы можете найти вопрос, который привел меня к этому решению. Это описано очень подробно.

2) Настройки в Internet Explorer: Проблема с тайм-аутом ищет меня, как некоторые функции безопасности IE блокирует что-то. В моем обозрении Internet Explorer имеет своеобразные правила, касающиеся содержания веб-сайтов. Попытайтесь добавить веб-сайты, которые тайм-аут на безопасные сайты под Internetsettings IE. Попробуйте также уменьшить защищенные/заблокированные функции защищенных сайтов.

Пожалуйста, дайте мне знать, если у вас есть дальше.

+0

Спасибо, colosso, я хотел бы попробовать настройки в Internet Explorer, как вы предлагали, но как это сделать вы делаете это в элементе управления webBrowser? –

+0

Фактически нет возможности выполнять настройки в самом элементе управления. Но контроль основан на Internet Explorer. Если вы измените настройки в IE, ваш элемент управления применит эти настройки к себе. – colosso