Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何让WebBrowser控件显示现代内容?_C#_.net_Winforms_Webbrowser Control_Internet Explorer 11 - Fatal编程技术网

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

C# 如何让WebBrowser控件显示现代内容?,c#,.net,winforms,webbrowser-control,internet-explorer-11,C#,.net,Winforms,Webbrowser Control,Internet Explorer 11,我创建了一个使用WebBrowser控件的Winforms应用程序;我动态地分配它的Uri。有一段时间效果很好,但现在我得到了这个消息: 您似乎正在使用不受支持的浏览器。较旧的浏览器可能会危及您的安全,速度较慢,并且无法与较新的谷歌地图功能配合使用。要访问谷歌地图,您需要更新到现代浏览器 最后两个词是一个链接,在该链接之后,我看到: 您当前正在使用。。。 IE 11 好的,WebBrowser组件使用IE 11;我怎样才能改变这一点 我的机器设置为使用Chrome作为浏览器;也许控件应该使用您当

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

您似乎正在使用不受支持的浏览器。较旧的浏览器可能会危及您的安全,速度较慢,并且无法与较新的谷歌地图功能配合使用。要访问谷歌地图,您需要更新到现代浏览器

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

您当前正在使用。。。 IE 11

好的,WebBrowser组件使用IE 11;我怎样才能改变这一点

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

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

键、字符串值、二进制值

我估计字符串值是“.exe”字符串,二进制值是“dword”VAL,但是“Key”值应该是什么呢?

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

见链接:

WebBrowser控件是围绕Internet Explorer安装的组件的托管包装器

你可以查看其他选择

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

症状-作为一种症状,站点在Internet Explorer或其他浏览器中正常工作,但
WebBrowser
控件不能很好地显示站点,对于某些站点,它会显示脚本错误

解决方案-您可以告诉
WebBrowser
控件在
WebBrowser
控件中使用最新的文档模式,而不使用兼容模式。您可以按照说明使用注册表禁用设置。 [参考:]

使用代码应用浏览器模拟设置

如果要使用代码应用设置,请运行以下代码一次:

using (var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
    @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION",
    true))
{
    var app = System.IO.Path.GetFileName(Application.ExecutablePath);
    key.SetValue(app, 11001, Microsoft.Win32.RegistryValueKind.DWord);
    key.Close();
}
在上面的代码中,我使用了
11001
,这意味着IE11边缘模式

Internet Explorer 11。网页以IE11边缘模式显示, 不管申报的是什么!DOCTYPE指令。没有申报 !DOCTYPE指令导致页面加载异常

手动应用浏览器模拟设置

打开注册表编辑器并浏览
HKEY\U CURRENT\U USER
,转到以下键:

Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
添加以下值:

"YourApplicationFileName.exe"=dword:00002af9
"YourApplicationFileName.vshost.exe"=dword:00002af9
(在旧版本的Visual Studio中,在Visual Studio中运行程序时,还需要添加vshost.exe值。)

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

在以上步骤中,我使用了
11001
,这意味着IE11边缘模式

对Windows窗体使用WebViewCompatible控件 您也可以使用新的。您可以在此处看到要使用的简单步骤:

WebViewCompatible
使用两个渲染引擎之一来支持更广泛的Windows客户端:

  • 在Windows 10设备上,较新的Microsoft Edge渲染引擎用于嵌入一个视图,该视图渲染来自远程web服务器的格式丰富的HTML内容、动态生成的代码或内容文件

  • 在运行旧版本Windows的设备上,使用System.Windows.Controls.WebBrowser,它提供基于Internet Explorer引擎的渲染

  • 注意:
    WebVIEW
    WebViewCompatible
    的替代品

设置X-UA-兼容元标记 如果您可以访问页面的html内容,并且可以更改内容(例如,它是本地html文件,或者站点属于您自己),那么您可以在
标题中设置meta标记,例如:

使用其他浏览器控件
您可以依赖其他浏览器控件,如。

对于应用程序上的嵌入式自定义协议,我只允许浏览应用程序提供的页面,不允许从外部浏览内容,因此我希望跳过保存到Windows注册表。当我按照Reza Aghaei的回答进行测试时,发现可以在内容页内更改兼容性模式。这将跳过配置注册表项的需要,但您必须将其添加到每个页面

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

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

...

以下步骤将添加正确的钥匙并再次拔出。 加载web浏览器所在的表单时调用CreateBrowserKey。 然后在关闭表单时,调用RemoveBrowser键

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

你能用IE 11浏览网址吗?(我的意思是iexplore.exe不是web浏览器控件。)是;只是控制突然停止了。所以看看下面的答案。另一个解决方案是完全放弃WebBrowser/IE,使用它作为铬的包装。请看一个最小的例子通常它通过使用IE的边缘模式解决了脚本和样式错误的问题。这样,站点将检测到你的代理为IE 11边缘模式。请查看我的更新。请查看帖子中的图片。太好了!如果站点在IE浏览器中正常,但在WebBrowser控件中无法正确显示,则可以应用此解决方案。顺便说一句,如果你是在客户机上分发应用程序,不要忘记使用安装程序或使用你的代码来执行这样的任务。谢谢你的赏金!我喜欢你赚取和花费声誉分数的方式!