
Google gadget engine对HTML/CSS的支持分析(续)
标签:
技术文章
2008-08-22 08:37
在几周前的《Google gadget engine对HTML/CSS的支持分析》一文中最终没有确定engine中的哪一块儿进行了HTML/CSS解析,只是怀疑libxml2。这两天继续分析了这个问题,发现libxml2确实支持HTML解析,但在engine中进行HTML/CSS解析的却不是libxml2。 定位HTML/CSS解析 上回提到有关HTML/CSS的显示只能在pluginHelper这个插件窗口中进行(采用pluginHelper.showDetailsView函数),而不能在gadget的主窗口中实现。所以,可以说Google gadget自身并不支持HTML/CSS的解析,而只能通pluginHelper实现。也就是说gadget界面部分只能通过view对象实现,不支持HTML/CSS的实现,而内容方面则可借用pluginHelper进行HTML/CSS的显示。下面我们就分析一下showDetailsView(Gadget.cc中)这个函数。其中有如下一段: if (details_view_data->GetContentIsHTML() || 这段代码比较迷惑人,容易让人误认为 GetGlobalFileManager() ->ReadFile(xml_file.c_str(), &xml); 是在读入HTML内容并统一名称用libxml2进行解析,实际上这段代码的重点却在xml_file = kHTMLDetailsView; 这里。查找kHTMLDetailsView的定义,在Gadget_consts.h中: const char kHTMLDetailsView[] = “resource://html_details_view.xml”; 可见,GetGlobalFileManager()->ReadFile(xml_file.c_str(), &xml); 读入的是一个engine自带的固定文件,而非HTML内容。resource://html_details_view.xml文件的内容如下所示: <?xml version=”1.0″ encoding=”UTF-8″?> browser.onGetProperty = function(name) { 这里有明显的调用浏览器过程,结合第一段代码中ScriptableInterface *ext_obj = details_view_data->GetExternalObject(); 语句在原码中发现相关内容,在extensions\gtkmoz_browser_element中的browser_child.cc文件中有如下类: class ExternalObject : public nsIXPCScriptable { NS_IMETHOD GetClassName(char **class_name) { NS_IMETHOD GetScriptableFlags(PRUint32 *scriptable_flags) { NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, 在第一段程序中的ScriptableInterface *ext_obj = details_view_data ->GetExternalObject(); 得到的就是上面这个类,而这个类中的方法又恰恰是JS到C++的映射,从这个文件的代码中还发现了其它一些会调用libgtkembedmoz库的函数,如gtk_moz_embed_new(),gtk_moz_embed_load_url()等等,而libgtkembedmoz(qt中为libqt4-webkit)是一个精简的浏览器引擎,由此可判断Google gadget engine中关于HTML/CSS内容的显示都是通过libgtkembedmoz(qt中为libqt4-webkit,Windows中也有对应的库)库来实现的。这种方法虽然存在一定冗余(包含的libxml2也支持HTML解析),但实现起来由于两个库分别进行XML和HTML的解析,结构比较清晰,而且采用专门的浏览器引擎库解析HTML/CSS速度更快,容错性更高。 结 论 Google gadget engine可以在pluginHelper这个插件窗口中(采用pluginHelper.showDetailsView函数)显示HTML/CSS内容,实现方法是通过解析固定的resource://html_details_view.xml文件绘制窗口,其中的JavaScript函数间接调用(映射成C++)精简浏览器库libgtkembedmoz(qt中为libqt4-webkit)进行HTML/CSS的解析并显示。 权限:公开 来自:labs
阅读全文:2247 | 转发(0) | 评论(0)
Labs推荐给你的相关资讯
博文
新闻
报告
帖子
看过此博文的还看过
|
他的标签
|