当前位置: 首页 > 工具软件 > NetSurf > 使用案例 >

轻量级浏览器NetSurf学习(九)-- 如何基于NetSurf打造自己的浏览器

钱雅逸
2023-12-01

一. 初始化netsurf_init(char *message, struct gui_table *gt)

需要为netsurf提供的两个参数要求如下:

一个包含多个文本键值对的zip文件路径,每一行一个键值对,格式例如Home:Home page

一个gui_table其中必须需要提供的方法如下:

gt->browser->[poll | schedule]

gt->window->[create | destroy | redraw |  update | get_scroll | set_scroll | get_dimensions | update_extent ]

gt->fetch->[filename_from_path | path_add_part | filetype | path_to_url | url_to_path ]

相关代码如下:

nserror netsurf_init(char *message, struct gui_table *gt) {

...

gui_factory_register(gt);

message_load(message);//message为包含多个文本键值对的zip文件,每一行格式例如Home:Home page

...

}

nserror gui_factory_register(struct gui_table *gt) {

verify_[browser |window| fetch|download |  clipboard | utf8 |  search]_register(gt->xxx); //蓝色部分会有默认实现,红色部分必须提供

guit = gt; //将gui_table值赋给全局变量

}

static nserror verify_browser_register(struct gui_browser_table *gbt) {

gbt != NULL ;

  gbt->[poll | schedule | quit | set_search_icon | launch_url | create_form_select_menu | cert_verify | login ] != NULL

}

static nserror verify_window_register(struct gui_window_table *gwt)

{
gwt !=NULL;

gwt->[create | destroy | redraw |  update | get_scroll | set_scroll | get_dimensions | update_extent] != NULL;

gwt->[set_title |set_url |set_icon |set_status |set_pointer |place_caret |remove_caret|start_throbber |stop_throbber|drag_start |save_link|scroll_visible|new_content  |scroll_start|file_gadget_open | drag_save_object |drag_save_selection |start_selection]!=NULL;

}

static nserror verify_fetch_register(struct gui_fetch_table *gft)
{
gft!=NULL;
gft->[filename_from_path | path_add_part | filetype | path_to_url | url_to_path ] != NULL;gft->[get_resource_url | mimetype ] != NULL;

}


1. nsandroid_fetch_table

分别实现filename_from_path | path_add_part | filetype | path_to_url | url_to_path 方法,赋值给变量nsandroid_fetch_table。

注意filetype方法需要先调用nsandroid_fetch_filetype_init初始化文件名后缀与mime type的hash表,最后程序退出时需要调用nsandroid_fetch_filetype_fin.

 类似资料: