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

B. *_*non 5 .net c# webbrowser-control winforms internet-explorer-11

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

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

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

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

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

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

UPDATE

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

键,字符串值,二进制值

我认为字符串值是".exe"字符串,二进制值是"双字"值,但"键"值应该是多少?

Rez*_*aei 15

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

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

解

您可以告诉WebBrowser控件在没有兼容模式的情况下使用最新的文档模式WebBrowser.您可以按照此处的说明使用注册表禁用设置.

这是我使用的设置.我应用了设置11001以使其工作:

using (var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
    @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION",
    true))
 {
    key.SetValue(Application.ExecutablePath, 11001, Microsoft.Win32.RegistryValueKind.DWord);
    key.Close();
 }
Run Code Online (Sandbox Code Playgroud)

这个值:

Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
Run Code Online (Sandbox Code Playgroud)

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

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

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

在此输入图像描述


jlc*_*vez 7

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

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

<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    </head>
    <body>
    ...
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)