如何为Web浏览器默认设置IE9?

时间:2013-04-08 08:30:40

标签: c# browser

我正在使用C#.NET开发一个应用程序。我想将IE9版本用于WebBrowser; IE9是否安装在系统上。

是否有可能将IE9与WebBrower一起使用,可能是我的系统中没有安装IE9?

5 个答案:

答案 0 :(得分:9)

使用Windows Internet Explorer 8或更高版本,FEATURE_BROWSER_EMULATION功能定义Internet Explorer的默认模拟模式。值9999 - 强制网页以IE9标准模式显示,而不管!DOCTYPE指令。您需要在目标系统上安装IE9或更高版本。查看Internet Feature Controls (B..C)

private static void WebBrowserVersionEmulation()
{
    const string BROWSER_EMULATION_KEY = 
    @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
    //
    // app.exe and app.vshost.exe
    String appname = Process.GetCurrentProcess().ProcessName + ".exe";
    //
    // Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.
    const int browserEmulationMode = 9999;

    RegistryKey browserEmulationKey =
        Registry.CurrentUser.OpenSubKey(BROWSER_EMULATION_KEY,RegistryKeyPermissionCheck.ReadWriteSubTree) ??
        Registry.CurrentUser.CreateSubKey(BROWSER_EMULATION_KEY);

    if (browserEmulationKey != null)
    {
        browserEmulationKey.SetValue(appname, browserEmulationMode, RegistryValueKind.DWord);
        browserEmulationKey.Close();
    }
}

答案 1 :(得分:2)

插入

"<meta  http-equiv=\"X-UA-Compatible\" content=\"IE="\9\" >"

进入你的html页面,但你必须知道Web_browser控制依赖于目标操作系统上已安装的IE版本

答案 2 :(得分:1)

为此,您必须查找

  • 底层浏览器的版本是什么(注册表项可能返回以前安装的版本)。我使用的最简单的代码是询问WebBrowser控件

    WebBrowser browser= new WebBrowser
    Version ver= browser.Version(); // With ver.Major you can decide the EMULATION
    

  • 您应用的app-exe-name(在vs调试环境中运行时与“myapp”.vshost.exe不同)。这个代码我找到了某个地方:

    // This code detects the .vshost. when running in vs ide
    [DllImport("kernel32.dll", SetLastError=true)]
    private static extern int GetModuleFileName([In]IntPtr hModule,
                                            [Out]StringBuilder lpFilename,
                                            [In][MarshalAs(UnmanagedType.U4)] int nSize);
    public static String getAppExeName()
    {
       StringBuilder appname= new StringBuilder(1024);
       GetModuleFileName(IntPtr.Zero, appname, appname.Capacity); 
       return Path.GetFileName(appname.ToString()); // return filename part
    }
    

  • 现在,您可以计算浏览器兼容性所需的Registry-Entry。 Entry可以在Registry.LocalMachine(需要访问权限)或Registry.CurrentUser中。我检查每个程序启动时的注册表,所以,我首先测试条目是否存在

    string regSubKey= @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
    string version= "" + ver.Version + "0000"; // installed version x 10000
    string appname= getAppExeName();
    RegistryKey rs = Registry.CurrentUser.OpenSubKey(regSubKey);
    keyval = rs.GetValue(appname);
    rs.Close();
    if (keyval != null && keyval.ToString().Equals(version))
         return;     // already done and no browser update installed.
    //
    // Create key for this app and this version
    rs = Registry.LocalMachine.CreateSubKey(regSubKey);
    rs.SetValue(app, sversion, RegistryValueKind.DWord);
    rs.Flush();
    rs.Close();
    

  • 在64位+ 32位模式下,您可能需要在“Software \ Wow6432Node”中创建一个条目

设置注册表项后,WebBrowser控件应以所需的模拟开始

答案 3 :(得分:0)

不,webbrowser-element(我认为你的意思是这个)是基于IE6的。你只能启动IE9的过程(不知道名字,但对于firefox来说简单的“firefox.exe”)构成程序。

答案 4 :(得分:0)

您可以从注册表中读取该版本:

var ieVersion = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Internet Explorer").GetValue("Version");

如果你有一个WebBrowser控件,你可以从那里抓取它:

WebBrowser  browser = new WebBrowser();
Version ver = browser.Version;