没有合适的资源?快使用搜索试试~ 我知道了~
webkit自带谷歌浏览器实例分析[参照].pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 169 浏览量
2021-10-12
01:32:47
上传
评论
收藏 245KB PDF 举报
温馨提示
webkit自带谷歌浏览器实例分析[参照].pdf
资源推荐
资源详情
资源评论
Webkit 自带谷歌浏览器实例分析( 1)
先看下这个简单浏览器的图片效果
我这个程序源代码是用 source insight 阅读的,,,source insight 怎一个强字了得?!
从 main 函数开始分析:
int
main (int argc, char* argv[])
{
gtk_init (&argc, &argv); /* 初始化 gtk 整个实例,每个 gtk 中必有的 */
if (!g_thread_supported ())
g_thread_init (NULL);
GtkWidget* vbox = gtk_vbox_new (FALSE, 0); /* 创建一个垂直的 box 来存放下列
部件,创建并添加工具栏( toolbar )、浏览器( browser )、状态栏( statusbar )*/
gtk_box_pack_start (GTK_BOX (vbox), create_toolbar (), FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), create_browser (), TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), create_statusbar (), FALSE, FALSE, 0);
main_window = create_window (); /* 创建主窗口,放置 vbox*/
gtk_container_add (GTK_CONTAINER (main_window), vbox); /* 将 vbox 放入主窗口 * /
/* 判断是否输入网址也就是命令行参数,有的话将值给 uri ,没有的话设为默认 */
gchar* uri = (gchar*) (argc > 1 ? argv[1] : "http://www.google.com/");
webkit_web_view_load_uri ( web_view, uri); /* 调用 webkit 库函数加载 uri 网址 */
gtk_widget_grab_focus (GTK_WIDGET ( web_view)); / 抓取 web_view 上的焦点? */
/* 现实整个主窗口,也就是浏览器窗口 */
gtk_widget_show_all (main_window);
gtk_main ();
return 0;
}
主函数从前到后读下来基本没什么问题,只是对 web_view 有点困惑,于是找到定义的
地方
static WebKitWebView* web_view; /* 很显然是一个全局静态变量 */
在 webkit 的源码包中的 gtk 目录下的 webkit 下的 Webkitwebview.h 查找 WebKitWebView:
发现 typedef struct _WebKitWebViewWebKitWebView; struct _WebKitWebView 的结构为:
struct _WebKitWebView {
GtkContainer parent_instance;
/*< private >*/
WebKitWebViewPrivate *priv;
};
依然不大懂,继续挖掘 WebKitWebViewPrivate :真是有种取之不尽挖之不绝的感觉
O(∩ _∩)O
typedef struct _WebKitWebViewPrivate WebKitWebViewPrivate;
再往下看终于看到曙光了:
struct _WebKitWebViewPrivate {
WebCore::Page* corePage; /* 这个应该是核心页面吧 */
WebKitWebSettings* webSettings; /* 页面有关的设置木有细挖,水太深 */
WebKitWebInspector* webInspector; /* 什么检查员? */
WebKitWebWindowFeatures* webWindowFeatures; /*Window 的特性 */
WebKitWebFrame* mainFrame; /*web 主框架 */
WebKitWebBackForwardList* backForwardList; /* 保存前进后退的链表 */
gint lastPopupXPosition; /* 不太懂 */
gint lastPopupYPosition; /* 依然不太懂 */
此处也省略很多
};
WebCore::Page* ?是什么东东?真是一波未平一波又起, 杯具之情油然而生, 究竟何时
是尽头,,,?放弃 or 继续走下去?其实本来想放弃的,但是想想都挖了这么深了,放弃了
可惜哇,,,go ahead !继续挖:
何为命名空间?据《 c++primer 》传言,一般大型程序或者库文件有很多全局变量,这
些变量重名的概率是相当的高,所以就会引起名字冲突, 《 C++primer 》起了个洋气的名字,
叫“命名空间污染” ,其实就是重名引起冲突而已。为了避免这种污染,就有了命名空间。
namespace WebCore {
AccessibilityARIAGrid::AccessibilityARIAGrid(RenderObject* renderer)
: AccessibilityTable(renderer)
{
#if ACCESSIBILITY_TABLES
m_isAccessibilityTable = true;
#else
m_isAccessibilityTable = false;
#endif
}/* 擦,, 无穷尽呐 ~*/
挖了半天,还是没有看到 page,原来是文件找错了⊙﹏⊙ b 汗,,,继续挖,,,终于在
WebKit-r47011\WebCore\page\gtk 下面的 EventHandlerGtk.cpp 中发现了这个东东,但是
凭我的智商,暂时这块还是先不挖了,为啥?请注意看 ,, 见证历史的时刻到了
namespace WebCore
{
class Chrome;
class Page : public Noncopyable
{
public:
static void setNeedsReapplyStyles();
Page(ChromeClient*, ContextMenuClient*, EditorClient*, DragClient*,
InspectorClient*);
~Page();
RenderTheme* theme() const { return m_theme.get(); };
static void refreshPlugins(bool reload);
PluginData* pluginData() const;
void setCanStartPlugins(bool);
bool canStartPlugins() const { return m_canStartPlugins; }
void addUnstartedPlugin(PluginView*);
void removeUnstartedPlugin(PluginView*);
EditorClient* editorClient() const { return m_editorClient; }
void setMainFrame(PassRefPtr<Frame>);
Frame* mainFrame() const { return m_mainFrame.get(); }
BackForwardList* backForwardList();
,,,,
此处省略 n 多行个 ,, , n>100
}? end Page?/* 貌似这个是 webkit 特有的注释 ( ⊙o⊙ ) 哇,经查证是 SI 的风格
*/
剩余10页未读,继续阅读
资源评论
czq131452007
- 粉丝: 2
- 资源: 12万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 地下城洞穴:Modular Dungeon Caves 1.0
- ResignTool 2.1 Windows 下的苹果ipa安装包重签名工具
- C语言在脚本语言开发中的多维应用
- 如何在UE4中处理单个FBX文件中的多根骨骼问题
- 使用Python爬取某车网参数详情并解析数据
- C语言与硬件描述语言(HDL)协同设计在FPGA开发中的应用
- 利用UE4和WorldCreator打造“秒速五厘米”风格大地图关卡概念设计
- Fortran Standard Library
- 山林树干和树根:Mountain Forest Trunks and Roots v1.3.1
- GoGuide 致力于打造最易懂的 Go语言教程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功