我在Visual Studio 2010中使用WebBrowser控件并尝试显示页面:http://lk21.org .
在该网页内部加载了大量脚本,如果我通过Web浏览器(如Firefox,Chrome和最新版本的IE)打开它,它可以正常工作 .
我的问题是,当我尝试使用WebBrowser组件导航到该页面时,为什么它会显示“Bad Request”?
看一下这个:
UPDATE:
使用Visual Vincent的答案很好地加载页面 .
然而,网站上的Flash视频(或者我认为它类似于flash)无法播放 . 请参阅下图中的比较 .
奇怪的是,如果我打开YouTube,闪光灯效果很好 . 经过一番研究,似乎是由其他东西造成的 . 任何线索如何解决?
Internet Explorer - works fine:
WebBrowser control - for some reason the video is stuck and can't be played:
2 回答
它可能与
WebBrowser
控件默认使用IE 7的文档模拟模式有关,这意味着所有页面都使用Internet Explorer 7引擎处理 . 由于该版本已经相当陈旧,目前大多数网站都与它不兼容,这会影响您访问该页面时的功能 .您可以通过在
HKEY_LOCAL_MACHINE
hive或HKEY_CURRENT_USER
中的注册表项Software\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
中为应用程序添加值来更改此行为 . 通过这样做,您强制您的应用程序使用IE引擎的 specific 版本 .我写了一堂课,可以帮助你:
要使用它,请将 one 这些行放在应用程序的
Startup
事件中:( NOTE: 使用
HKEY_LOCAL_MACHINE
root需要管理权限)InternetExplorer.SetLatestBrowserEmulation()
方法将为您的应用程序在指定的注册表根目录中将浏览器仿真设置为Internet Explorer的 latest INSTALLED version .但是,使用
InternetExplorer.SetBrowserEmulation()
方法,您可以手动控制它应该使用的IE版本 (not recommended!) .Read more:
Internet Feature Controls - Browser emulation
Application.Startup event
How to: Handle Application Events (Visual Basic)
编辑
我似乎根本无法进入该网站,但是从我读过的内容来看there have been problems with Flash hosted in the WebBrowser control .
您可以尝试禁用ActiveX Object Caching feature,这显然会导致Flash控件出现问题 .
我更新了上面的
InternetExplorer
课程 . 复制粘贴它,然后将此行添加到应用程序的启动事件中:如果它仍然不起作用那么我担心你运气不好 . 我找不到任何有用的东西 .
基于@ Visual Vincent 回答,我在这里做了一个重新设计的解决方案:
1 - IEBrowserEmulationMode 枚举:
2 - RegistryScope 枚举 .
3 - BrowserEmulationMode 属性,用于获取或设置当前应用程序的IE浏览器仿真模式 .
3 - GetIEBrowserEmulationMode 函数和 SetIEBrowserEmulationMode 方法,获取或设置外部应用程序的IE浏览器仿真模式 .
用于获取,设置和验证当前进程的IE浏览器仿真模式的用法示例:
用于获取,设置和验证特定进程的IE浏览器仿真模式的用法示例: