一. 初始化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.