6

This is for a Desktop C# app in Visual Studio Express 2012.

I am using a webBrowser control to logon to various websites but find some do not respond and timeout.

I suspected it may be the webBrowser control inherently running IE7 but found the websites work fine on an old PC running IE7 as a native browser. Is there something in webBrowser I need to set to allow a website such as the one in the code below to process responses?

The code below navigates to a website I am having trouble with. If you enter any values for Login and Password in a native browser, it immediately responds and throws an error , but in a webBrowser it sits there waiting for a response and eventually times-out.

Any help would be greatly appreciated!

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/");
        }
    }
}
noseratio
  • 59,932
  • 34
  • 208
  • 486
Michael 1410
  • 73
  • 1
  • 9
  • 1
    Consider implementing [WebBrowser feature control](http://stackoverflow.com/a/18802626/1768303) to match the IE behavior. – noseratio Oct 08 '13 at 11:05
  • 1
    Thankyou so much Noseratio - it worked a charm for this particular website! I will keep testing now on other websites. Here is complete working version of the code. Note - you can use Windows regedit to check the registry settings made by this program (I have no idea which combination of them fixed the problem): – Michael 1410 Oct 10 '13 at 08:42

2 Answers2

1

I worked often with the WenBrowserControl and can't really remember even one time I did not have any problems especially with the browermode of the control. Following were some steps that helped me solving many of these problems:

1) Force the application to use the InternetExplorer settings: First I suggest you try adding a registry key for your application under

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

and

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

with the value 9000 which forces the control in your application to use the IE9 settings. Here you can find the question which brought me to this solution. Its described very detailed there.

2) Settings in Internet explorer: The timeout problem looks for me like some security feature of IE is blocking something. In my oppinion Internet Explorer has kinda srict regulations concerning content of websites. Try to add the websites that time out to the secure sites under the Internetsettings of IE. Try also to decrease the security / blocked features of the secure sites.

Please let me know if you got any further.

Community
  • 1
  • 1
colosso
  • 2,525
  • 3
  • 25
  • 49
  • Thankyou colosso, I would like to try settings in Internet Explorer as you have suggested but how do you do that in a webBrowser control? – Michael 1410 Oct 10 '13 at 08:49
  • There is actually no possibility to do the settings in the control itself. But the control is based on Internet Explorer. If you change the settings in IE your control will apply these settings to itself. – colosso Oct 10 '13 at 08:54
0

Here is the complete working code:

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;
        }



    }
}
Michael 1410
  • 73
  • 1
  • 9
  • You may not need all those features. I'd suggest starting with `FEATURE_BROWSER_EMULATION`, usually it's enough. – noseratio Oct 10 '13 at 08:49