在.net平台上开发客户端,有的业务需要迁入网页,一般的就是用webbrowser插件和第三方的基于.net版的webkit浏览器插件,但是使用webbrowser有一个问题是:它会受用户安装IE浏览器的环境影响,有的网页就不能兼容的问题,使用基于.net版第三方的webkit,有很多bug问题,且很多方法是预留的(意即没实现),根据客户端的运行情况,也是受用户机器环境的影响报各种错误?大家项目中都是怎么做的,有什么好的解决方案吗?求解释
使用 WebBrowser,网页不兼容的,就把网页改兼容了。
网页兼容只是一方面的问题,还有其他的问题比如:不支持html5,网页就需要展示有html5元素的图表、嵌入基于html的flash播放器;有的用户报错缺少文件(缺少.net 类库下的某个dll);有的网页是其他方跳入的,用户只会说网页有问题,在其它浏览器没问题等等...不可能做到全部给它改兼容了
@yss小虾米:
不要说嵌入浏览器的兼容问题,就算是不嵌入的浏览器,不也一样有兼容性问题。而要解决兼容性问题,不都得等厂商发布新的内核,然后客户端重新安装一次。你能明白360浏览器和IE的区别吗?能明白 Firefox 和 IE 的区别吗?
http://blog.bingo929.com/html5-ie-enabling-script.html
@Launcher: 恩恩谢谢你这位大牛,我们解决问题有点急,当时没考虑到现在的问题,也没找到好的解决办法,临时应付一下。你给的办法仔细学习。
楼上说的很给力,支持一个.
主要还是解决网页的兼容性
WebBrowser 控件可以通过运行添加注册表项来强制渲染模式,以下是我最近的一个项目,强制运行IE8标准模式,这样可以兼容XP系统。如果你要求支持html5,也可以使控件运行IE9以上的标准模式,如果用户没有安装相应版本,则提示升级。
using Microsoft.Win32; private void Form1_Load(object sender, EventArgs e) { if (wb.Version.Major < 8) { MessageBox.Show("浏览器版本太低,请升级至IE8或以上版本后重试。"); Application.Exit(); } else { this.RunAsIE8Mode(); } new Thread(new ThreadStart(Page_Load)).Start(); //启用独立线程加载页面 } /// <summary> /// 使网页以IE8模式加载 /// </summary> private void RunAsIE8Mode() { RegistryKey prk = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Internet Explorer\Main\FeatureControl", RegistryKeyPermissionCheck.ReadWriteSubTree); RegistryKey rk = prk.OpenSubKey("FEATURE_BROWSER_EMULATION", RegistryKeyPermissionCheck.ReadWriteSubTree); if (rk == null) { rk = prk.CreateSubKey("FEATURE_BROWSER_EMULATION", RegistryKeyPermissionCheck.ReadWriteSubTree); } string exe = Process.GetCurrentProcess().ProcessName + ".exe"; rk.SetValue(exe, "8888", RegistryValueKind.DWord); //这里的8888则为IE8标准渲染模式,其他模式可以上MSDN搜索 rk.Close(); }
这样处理之后,网页开发就只需要针对一个兼容模式即可。
谢谢您,这也是一个解决兼容性问题的好办法。(之前看到忘记回复,望见谅)