当前位置 博文首页 > HW的博客:探索webkit

    HW的博客:探索webkit

    作者:[db:作者] 时间:2021-07-26 12:07

    浏览器内核

    最近项目需要嵌入一个网页浏览窗口,以前在windows下可以直接在界面中去嵌入一个IE提供的ActiveX控件,MFC或Duilib这样的界面库都有提供嵌入ActiveX控件的能力。现在在linux开发,所以只能另寻路径。

    一个浏览器内核的主要功能无外乎:

    • 网络协议比如http、https、ftp等;
    • html、css、xml解析器;
    • js引擎;
    • layout布局;
    • 渲染引擎;
    • 此外就是什么浏览记录、cookie、收藏夹等浏览器附加界面业务功能

    搜索了下现在浏览器内核,主流的主要有三个,可以说是三分天下:

    • Trident IE浏览器
    • Gecko Firefox浏览器
    • WebKit Safari, Google Chrome浏览器

    下面是百科上对他们的一些简单介绍

    Trident

    Trident (又称为MSHTML),是微软的窗口操作系统(Windows)搭载的网页浏览器—Internet Explorer的

    排版引擎的名称,它的第一个版本随着1997年10月Internet Explorer第四版释出,之后不断的加入新的技术

    并随着新版本的Internet Explorer释出。在未来最新的Internet Explorer第七版中,微软将对Trident排版引

    擎做了的重大的变动,除了加入新的技术之外,并增加对网页标准的支持。尽管这些变动已经在相当大的程度

    上落后了其它的排版引擎,如Gecko、WebCore、KHTML及Presto。

    Trident引擎被设计成一个软件组件(模块),使得其它软件开发人员很容易的将网页浏览的功能加到他们自行

    开发的应用程序里。微软提出了一个称为组件对象模型(COM)的软件接口架构。供其它支持的组件对象模型

    开发环境的应用程序(如:C 及.NET)存取及编辑网页。例如,由C 所撰写的程序可以加入浏览器控件里,

    并透过Trident引擎存取当前显示在浏览器上的网页内容及网页的各种元素的值,从浏览器控件触发的事件亦

    可被程序撷取并进行处理。Trident引擎所提供的所有函式库可以透过与 mshtml.dll这个档案的连结而达成撰

    写程序时所需要的功能。

    除此之外,微软还有另一个网页浏览器排版引擎,称为Tasman,它是使用在「Internet Explorer for Mac」的

    排版引擎。相较于Trident,Tasman引擎对网页标准有较佳的支持。与普遍的看法相反的是,微软已经停止了

    麦金塔计算机版本的 Internet Explorer的开发,但Tasman的开发仍旧持续, 新版本的Tasman引擎仍被应用在

    一些微软产品上,如:麦金塔计算机版本的Microsoft Office。
    使用Trident引擎的浏览器有很多,比如Maxthon,腾讯TT,MyIE 等等,但Trident只能应用于Windows平台.

    Gecko

    Gecko是套开放源代码的、以C 编写的网页排版引擎。目前为Mozilla家族网页浏览器以及Netscape 6以后

    版本浏览器所使用。这软件原本是由网景通讯公司开发的,现在则由Mozilla基金会维护。
    这套排版引擎提供了一个丰富的程序界面以供互联网相关的应用程式使用,例如网页浏览器、HTML编辑器、

    客户端/服务器等等。虽然最初的主要对象是 Mozilla的衍生产品,如Netscape和Mozilla Firefox,现在已

    有很多其他软件现在利用这个排版引擎。Gecko是跨平台的,能在Microsoft Windows、Linux和Mac OS X

    等主要操作系统上运行。

    Gecko是最流行的排版引擎之一,其流行程度仅次于Trident.
    使用Gecko引擎的浏览器有Firefox, 网景(6至9), SeaMonkey, Camino, Mozilla, Flock, Galeon, K-Meleon,

    Minimo, Sleipnir, Songbird , XeroBank.

    WebKit

    WebKit是Mac OS X v10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。

    同时,WebKit也是Mac OS X的Safari网页浏览器的基础。WebKit是一个开源项目,包含了来自KDE项目和

    苹果公司的一些组件。
    目前使用WebKit 引擎的浏览器主要有:Safari(apple出品),Midori,chrome(google出品)等。

    WebKit拥有清晰的源码结构、极快的渲染速度。

    通过比较,考虑到跨平台性首先Trident被pass了,而现在流行程度webkit是首选了,而且gtk、qt都有对webkit的port版本。

    webkitgtk

    在webkit的下载页,发现linux下的webkit版本有gtk、efl,此外qt内也集成了qtwebkit。首先研究了下gtk下webkit的使用。

    我使用的版本是webkitgtk-3.0,在ubuntu下可以直接使用
    sudo apt-get install libwebkitgtk-3.0-dev安装

    直接贴上测试代码:

    #include <gtk/gtk.h>
    #include <webkit/webkit.h>
    
    int main(int argc, char* argv[]){
        const char* url = "http://www.video4a.com/";
    
        gtk_init(&argc, &argv);
    
        GtkWidget* mainwnd = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(mainwnd), url);
        gtk_container_set_border_width(GTK_CONTAINER(mainwnd), 10);
        gtk_widget_set_size_request(mainwnd, 640, 480);
        g_signal_connect(G_OBJECT(mainwnd), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    
        GtkWidget* web = webkit_web_view_new();
        webkit_web_view_load_uri((WebKitWebView*)web, url);
        gtk_container_add(GTK_CONTAINER(mainwnd), web);
    
        gtk_widget_show_all(mainwnd);
    
        gtk_main();
    
        return 0;
    }
    

    编译:
    gcc -g -Wall test.cpp -o test pkg-config --cfalgs --libs webkitgtk-3.0

    效果图:
    webkitgtk

    可以发现webkitgtk提供了WebKitWebView这样一个widget,很方便的在gtk程序中加入。更多WebKitWebView的使用可以参考下载的源码中文档提供的WebKitWebView.html,里面有WebKitWebView的api使用方法,(小tips:下载一个源码后,一般会提供相应的帮助文档或demo,利用好可以省去到处找示例代码的功夫

    qtwebkit

    项目考虑到gtk还是局限在了linux下,qt的可移植性和现在的流行度更好,所以我打算最终采用qt代替原有的glut窗口。关于QWebView的使用也是很方便简单的。

    cs