如何让WebBrowser控件显示现代内容?

时间:2016-07-21 20:54:19

标签: c# .net winforms webbrowser-control internet-explorer-11

我创建了一个使用WebBrowser控件的Winforms应用程序;我动态分配它的Uri。它工作了一段时间,但现在我得到了这个消息:

您似乎使用的是不受支持的浏览器。较旧的浏览器可能会使您的安全性受到威胁,速度很慢,并且无法使用较新的Google地图功能。要访问Google地图,您需要更新到现代浏览器。

最后两个单词是一个链接,在该链接之后,我看到:

您目前正在使用...  IE 11

所以,好吧,WebBrowser组件使用IE 11;我怎么能改变它?

我的机器设置为使用Chrome作为其浏览器;也许控件应该使用您当前的浏览器?我不知道这是否可行。

更新

好的,我愿意尝试给Reza的建议。但是当我导航到regedit中的指定位置,并在右窗格中右键单击以添加新条目时,它有三个选项:

键,字符串值,二进制值

我认为字符串值是" .exe"字符串,二进制值是" dword" vals,但是" Key"价值观是?

4 个答案:

答案 0 :(得分:12)

WebBrowser控件使用安装在您的操作系统上的相同Internet Explorer版本,但默认情况下它不使用最新的文档模式,并以兼容模式显示内容。

作为一种症状,您可以在Internet Explorer中看到该站点,但WebBrowser控件未正确显示该站点,对于某些站点,它也显示脚本错误。

解决方案

您可以告诉WebBrowser控件在WebBrowser控件中使用没有兼容模式的最新文档模式。您可以按照here说明使用注册表禁用该设置。

这是我使用的设置。我在HKEY_CURRENT_USER中应用了设置以使其正常工作:

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

和这个值:

"YourApplicationFileName.exe"=dword:00002af9
"YourApplicationFileName.vshost.exe"=dword:00002af9

不要忘记 vshost.exe 。如果您在Visual Studio中运行程序,则需要它。

它使浏览器控件使用Internet Explorer 11,因此无论声明的!DOCTYPE指令如何,网页都以IE11边缘模式显示。未能声明!DOCTYPE指令会导致页面加载Quirks。

要创建条目,请右键单击右窗格的空白区域,然后在选择dword值后出现的窗口中,选择十六进制并输入2af9

enter image description here

答案 1 :(得分:6)

在我的应用程序中使用嵌入式自定义协议的情况下,我只允许浏览应用程序提供的页面,而不允许来自外部的内容,所以我想跳过保存到Windows注册表。当我按照Reza Aghaei的回答进行测试后发现您可以在内容页面中更改兼容模式。这将省略配置注册表项的需要,但您必须将其添加到每个页面。

要更改页面的兼容模式,您必须为其添加元标记以供呈现引擎应用:

<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    </head>
    <body>
    ...
    </body>
</html>

答案 2 :(得分:2)

以下步骤将添加正确的密钥,然后再次将其删除。 加载Web浏览器所在的表单后,调用CreateBrowserKey。 然后在关闭表单时,调用RemoveBrowserKey

Private Sub CreateBrowserKey(Optional ByVal IgnoreIDocDirective As Boolean = False)
    '      Dim basekey As String = Microsoft.Win32.Registry.CurrentUser.ToString
    Dim value As Int32
    '       Dim thisAppsName As String = My.Application.Info.AssemblyName & ".exe"

    ' Value reference: http://msdn.microsoft.com/en-us/library/ee330730%28v=VS.85%29.aspx
    ' IDOC Reference:  http://msdn.microsoft.com/en-us/library/ms535242%28v=vs.85%29.aspx
    Select Case (New WebBrowser).Version.Major
        Case 8
            If IgnoreIDocDirective Then
                value = 8888
            Else
                value = 8000
            End If
        Case 9
            If IgnoreIDocDirective Then
                value = 9999
            Else
                value = 9000
            End If
        Case 10
            If IgnoreIDocDirective Then
                value = 10001
            Else
                value = 10000
            End If
        Case 11
            If IgnoreIDocDirective Then
                value = 11001
            Else
                value = 11000
            End If

        Case Else
            Exit Sub
    End Select
    Microsoft.Win32.Registry.SetValue(Microsoft.Win32.Registry.CurrentUser.ToString & BrowserKeyPath, _
                                              Process.GetCurrentProcess.ProcessName & ".exe", _
                                              value, _
                                              Microsoft.Win32.RegistryValueKind.DWord)
End Sub

Private Sub RemoveBrowserKey()
    Dim key As Microsoft.Win32.RegistryKey
    key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(BrowserKeyPath.Substring(1), True)
    key.DeleteValue(Process.GetCurrentProcess.ProcessName & ".exe", False)
End Sub

答案 3 :(得分:1)

C#WebBrowser类基本上是一个IE包装器,因此无法更改。

请参阅this链接:

  

WebBrowser控件是使用Internet Explorer安装的组件的托管包装。

有关替代方案,您可以查看

WebKit.NET

GeckoFX