轻量级浏览器NetSurf学习(九)-- 如何基于NetSurf打造自己的浏览器
一. 初始化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.
轻量级浏览器NetSurf学习(九)-- 如何基于NetSurf打造自己的浏览器相关推荐
- python制作浏览器 脚本之家_基于Python打造账号共享浏览器功能
本篇文章介绍的内容会涉及到以下知识: PyQt5的使用; Selenium的使用; 代理服务器的架设和使用: 一.账号限制之痛 在如今的互联网中,免费的信息和资源占据了很大一部分,各类互联网应用提供了 ...
- python账号_基于Python打造账号共享浏览器功能
本篇文章介绍的内容会涉及到以下知识: PyQt5的使用; Selenium的使用; 代理服务器的架设和使用: 一.账号限制之痛 在如今的互联网中,免费的信息和资源占据了很大一部分,各类互联网应用提供了 ...
- 浏览器选择 html,select的最佳预设打造全兼容各浏览器select
我们知道select标签在各个浏览器中的属性和各浏览器的支持各有些不同,从而造成select选择框在各浏览器的显示有不同,下面我们通过对主要外形CSS属性的支持,打造全兼容select. 我对sele ...
- 清华大学矣晓沅:“九歌”——基于深度学习的中国古典诗歌自动生成系统
授权自AI科技大本营(ID:rgznai100) 本文共2714字,建议阅读6分钟. 本文为你介绍清华自然语言处理与社会人文计算实验室的自动作诗系统--"九歌"及其相关的技术方法和 ...
- at24c16如何划分出多个读写区_AVR学习笔记九、基于AT24C16的数据存储实验
Ema{@AVR 学习笔记九.基于 AT24C16 的数据存储实验 ------- 基于 LT_Mini_M16 9.1 用 I/O 口模拟 I2C 总线实现 AT24C16 的读写 9.1.1 .实 ...
- 自动驾驶系统进阶与项目实战(九)基于行锚框和全局信息的深度学习车道线检测方法
自动驾驶系统进阶与项目实战(九)基于行锚框和全局信息的深度学习车道线检测方法 目前多数基于深度学习的车道线检测方法通常把车道线的识别问题处理为车道线像素分割问题,单纯的像素级语义分割模型的推理的实时性 ...
- 系统学习深度学习(三十九)--基于模型的强化学习与Dyna算法框架
转自:https://www.cnblogs.com/pinard/p/10384424.html 在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Poli ...
- 机器人动力学与控制学习笔记(九)————基于模糊自适应增益调整的机器人滑模控制
九.基于模糊自适应增益调整的机器人滑模控制 采用自适应模糊系统,可实现机器人滑模控制中切换增益的自适应逼近,从而消除滑模控制中的抖振.本文设计一类基于模糊自适应增益调整的机器人滑模控制设计方法. 9. ...
- 《树莓派学习指南(基于Linux)》——第 2 章 开始探索 2.1 欢迎使用LXDE
本节书摘来自异步社区<树莓派学习指南(基于Linux)>一书中的第2章,第2.1节,作者[英]Peter Membrey ,[澳]David Hows ,译者 张志博,孙峻文,更多章节内容 ...
- Android音视频学习系列(八) — 基于Nginx搭建(rtmp、http)直播服务器
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
最新文章
- 二分图的最大匹配(匈牙利算法)HDU1083
- linux Shell(脚本)编程入门实例讲解详解
- linux如何挂载nfs目录,linux – NFS导出已经挂载NFS的目录(在服务器上)
- python中求根公式_用python做个带GUI的求根公式吧
- Python : 反斜杠
- SGU 231 Prime Sum 求lt;=n内有多少对素数(a,b)使得a+b也为素数 规律题
- 2016 Google中国开发者大会游记
- 如何向maven仓库中上传第三方jar包(私服)
- 短期通过PMP考试?
- 『Python动手学』PyQt5入门教程
- 2008评估过期 server sql_SQLServer2008R2数据库评估版已经过期解决办法.doc
- HTML5如何实现网页消息通知提醒
- 读书笔记——晶体管电路设计
- JAVAWEB-NOTE04
- springboot返回时间问题
- Swagger使用方法
- 验证码识别-Java版
- C语言编程从键盘输入n
- 思科服务器如何配置文件,思科服务器的配置方法
- 浅析:SEO是什么意思?