关于.NET CF版WebBrowser控件的问题
最近在做一个以文字内容展现为主的Windows Mobile项目,为了达到最佳的内容展现效果(支持文字、连接和图片混排),又想偷懒,所以决定使用.NET CF自带的WebBrowser控件,完全能满足项目的需求。
一开始基于.NET CF 3.5开发,使用WM6仿真器调试,在WM6.1设备上测试也正常。但是在WM6.5仿真器运行时出问题了,如下图所示:
文字偏大,图片无法显示。经过网上搜索发现.NET CF 3.5的WebBrowser控件在WM6.1.4和WM6.5系统上(含IE6核心浏览器)确实存在兼容性问题,微软官方也发布了相应的KB,需要升级.NET CF 3.5 (版本号:3.5.9198.0)才能解决,而且更新的.NET CF 3.5安装包还不提供下载,而是通过MarketPlace升级。不过我在网络上已经找到了cab包下载。安装了新的.NET CF 3.5版本后确实没有兼容性问题了,可是这种做法对用户来说是不可能接受的。这里有该问题的详细描述。
于是我打算从.NET CF 3.5降级到2.0来开发,在WM6.5仿真器上测试一切正常。
这个问题本应该算是解决了,当我把程序发给客户测试时,在他的HTC Touch HD (WM 6.1, WVGA)上显示又出问题了,文字特别小,而且还出现水平滚动条,即文字不会自动换行。我马上在HTC T3333 (WM6.5, QVGA)上测试,发现另一个极端,文字特别大,大得屏幕只能放得下五个汉字。看到这个情景,我的心都凉了!
把项目升级到.NET CF 3.5后显示正常:
因此我得到的结论是:.NET CF版的WebBrowser控件实在没法用!
于是我开始寻找其他的方案,第一个想到的是OpenNETCF 1.4中WebBrowser控件。OpenNETCF 1.4属于.NET CF 1.0那个时期的产品,由于它的免费和开源,再加上当时的.NET CF 1.0在功能和性能上都不是很完善,所以OpenNETCF一度成为.NET CF应用开发必备的第三方组件。当.NET CF 2.0发布后,功能更加完整,WebBrowser控件也成为了标准控件,OpenNETCF 2.0中就不再包含WebBrowser控件了。
从OpenNETCF 1.4的源码提取出WebBrowser控件不算麻烦,我大概花差不多1个小时的时间提取、整理和调试。如果你觉得麻烦,可以直接下载这篇文章的代码直接拿来用,而且比我自己提取的好用,Navigated事件能够正常触发。
经过在一些仿真器和真机上测试,OpenNETCF版的WebBrowser控件都能够正常展现HTML页面,满足了我的项目需求。另外还有两个很有用的特性:1)不会出现页面加载状态栏;2)可以禁用页面的右键菜单,甚至换成自己的右键菜单。
这个问题终于可以告一段落,下面是一些相关的参考文章:
Mouse Events for WebBrowser Control in .NET CF
http://www.codeproject.com/KB/windows/browsermouseevents.aspx
Disable WebBrowser's Context-Menu in NETCF applications
http://blogs.msdn.com/b/raffael/archive/2009/01/08/disable-webbrowser-s-context-menu-in-netcf-applications.aspx
Subclassing NETCF Applications
http://blogs.msdn.com/b/raffael/archive/2008/02/26/subclassing-netcf-applications.aspx
Windows Mobile 6.5 Web Browser Control: Enabling Gesture support
http://blog.mjfnet.com/Blog/2009/07/21/WindowsMobile65WebBrowserControlEnablingGestureSupport.aspx
Windows Mobile 6.5 Web Browser Control: Enabling Selection support
http://blogs.msdn.com/b/mikefrancis/archive/2009/07/21/windows-mobile-6-5-web-browser-control-enabling-selection-support.aspx
Hosting ActiveX Controls in the .NET Compact Framework 2.0
http://msdn.microsoft.com/en-us/library/aa446515.aspx
Microsoft released a HotFix for NETCF v3.5 on Windows Mobile 6.1.4 onwards, to address basic functionalities of WebBrowser control
http://blogs.msdn.com/b/raffael/archive/2009/09/29/microsoft-released-a-hotfix-for-netcf-v3-5-on-windows-mobile-6-1-4-onwards-to-address-basic-functionalities-of-webbrowser-control.aspx
Hiding the Progress Bar of a .NET 2.0 CF WebBrowser
http://www.chriskarcher.net/2008/01/26/hiding-the-progress-bar-of-a-net-20-cf-webbrowser
Horizontal Scrolling with WebBrowser Control
http://social.msdn.microsoft.com/Forums/en-US/netfxcompact/thread/0453de2a-8101-4cab-ba0d-cf99cefe57b1
Hosting a Native Windows Control within a Microsoft® .NET Compact Framework Forms Control
http://msdn.microsoft.com/en-us/library/Aa446514
作者:黎波
博客:http://bobli.cnblogs.com/
日期:2010年12月20日