我创建了一个使用WebBrowser控件的Winforms应用程序;我动态分配它的Uri。它工作了一段时间,但现在我得到了这个消息:
您似乎使用的是不受支持的浏览器。较旧的浏览器可能会使您的安全性受到威胁,速度很慢,并且无法使用较新的Google地图功能。要访问Google地图,您需要更新到现代浏览器。
最后两个单词是一个链接,在该链接之后,我看到:
您目前正在使用... IE 11
所以,好吧,WebBrowser组件使用IE 11;我怎么能改变它?
我的机器设置为使用Chrome作为其浏览器;也许控件应该使用您当前的浏览器?我不知道这是否可行。
好的,我愿意尝试给Reza的建议。但是当我导航到regedit中的指定位置,并在右窗格中右键单击以添加新条目时,它有三个选项:
键,字符串值,二进制值
我认为字符串值是" .exe"字符串,二进制值是" dword" vals,但是" Key"价值观是?
答案 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
:
答案 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安装的组件的托管包装。
有关替代方案,您可以查看