摘要: .NET的基础类Object有一个Equals方法,这个方法用来比较两个对象是否相等,默认的实现是比较两个引用是否相同,相当于==操作符。对于不同的子类可能会有不同的实现,本篇就来研究一下delegate的equals方法。首先是msdn上给出的说明按照以下方式比较这些方法和目标是否相等:如果所比较的两种方法都是静态的且对同一类为同一方法,则这些方法被视为相等,这些目标也被视为相等如果所比较的两种方法都是实例方法且对同一个对象为同一种方法,则这些方法被视为相等,这些目标也被视为相等。否则,这些方法被视为不相等,这些目标也被视为不相等。 仅当两个调用列表具有相同顺序,并且两个列表的对应元素表示相 阅读全文
posted @ 2012-12-28 18:56 有来 有去 阅读(2222) 评论(0) 推荐(0) 编辑
摘要: 做爬虫的时候最头疼的就是遇到一些动态加载的页面或者是一些动态生成的链接。比如我们的博客园就是个例子:凤凰网的评论链接也是一样:今天我们就用Webkit来解决这个问题。预备知识可以看一下我前面几篇文章,准备工作参照利用InjectedBundle定制自己的Webkit(二)中的客户端程序。一切就绪之后我们开始!首先介绍一些重要的函数和回调在创建一个Page之后我们可以设置一些回调函数,其中有一个是:WKPageLoaderClient::didFinishDocumentLoadForFrame原型是:typedef void (*WKPageDidFinishLoadForFrameCallb 阅读全文
posted @ 2012-12-12 14:56 有来 有去 阅读(18645) 评论(6) 推荐(5) 编辑
摘要: 由于时间仓促,之前贴的代码中有些许错误,请大家见谅,现已更正,并附上运行结果!----------------我是开始分割线-----------------在上一篇利用InjectedBundle定制自己的Webkit(一)中,我们完成了一个自己的InjectedBundle,接下来我们就要在Webkit中加载我们自己的InjectedBundle。为了测试方便先给出一个示例的InjectedBundle代码,项目名称MyInjectedBundle。#include<WebKit2/WKBundleInitialize.h>#include<WebKit2/WKBundl 阅读全文
posted @ 2012-12-03 18:29 有来 有去 阅读(5568) 评论(2) 推荐(3) 编辑
摘要: Webkit是一个多进程构架,内核WebCore和JS引擎JavaScriptCore都处在WebProcess进程中,而用户界面相关的处理则处在UIProcess进程中。(详见Webkit客户端进程解析)Webkit提供了大量的API供客户程序调用,但是这些API都是在客户进程中调用的,我们无法访问到内核部分的数据结构并处理,如DOM树、Render树、加载的Web资源等等。为了解决这一问题,Webkit提供了一个运行在内核进程的InjectedBundle来提供对内核数据的操作。InjectedBundle类似于一个插件,单独编译成一个动态库,在内核进程运行到特定情况时会调用Injecte 阅读全文
posted @ 2012-12-02 20:01 有来 有去 阅读(4604) 评论(2) 推荐(2) 编辑
摘要: 最近看了很多关于Webkit原理的博客和资料,大都是介绍整体构架和诸如资源加载、HTML解析、Rendering等服务端进程的原理。但是新版本的Webkit(Webkit2)是一个多进程模型,而不是过去的单进程模型。这些进程分为两类,分别是:服务端(WebProcess)和客户端(UIProcess)客户端资料的缺少使得我对客户端进程产生了兴趣,经过对代码的研究,找出了一点门道,这里分享给大家。首先介绍一下两个进程的关系顾名思义,服务端就是完成客户端发来的请求并回应,而客户端就是资源或功能的请求者,只不过他们不像Web服务器和浏览器一样处于不同的机器(一般都这样),他们只是两个进程而已。这样做 阅读全文
posted @ 2012-11-22 14:39 有来 有去 阅读(4408) 评论(0) 推荐(0) 编辑
摘要: 近日在研究webkit的时候发现了一个函数template<typename T> inline void deleteOwnedPtr(T* ptr){ typedef char known[sizeof(T) ? 1 : -1]; if(sizeof(known)) delete ptr;}一开始对这个函数非常费解,为什么作者不直接delete ptr;通过上stackoverflow提问然后查阅了一些资料后终于得到结果:这是用来防范错误释放incomplete type指针而导致的未知的行为。这样做之后,释放incomplete type指针将引发一个编译错误,... 阅读全文
posted @ 2012-11-15 18:54 有来 有去 阅读(2547) 评论(0) 推荐(1) 编辑
摘要: 上一篇《用C#实现网络爬虫(一)》我们实现了网络通信的部分,接下来继续讨论爬虫的实现3. 保存页面文件这一部分可简单可复杂,如果只要简单地把HTML代码全部保存下来的话,直接存文件就行了。 1 private void SaveContents(string html, string url) 2 { 3 if (string.IsNullOrEmpty(html)) //判断html字符串是否有效 4 { 5 return; 6 } 7 string path = string.Format("{0}\\{1}.txt", _path, _in... 阅读全文
posted @ 2012-06-17 11:34 有来 有去 阅读(32983) 评论(54) 推荐(28) 编辑
摘要: 网络爬虫在信息检索与处理中有很大的作用,是收集网络信息的重要工具。接下来就介绍一下爬虫的简单实现。爬虫的工作流程如下爬虫自指定的URL地址开始下载网络资源,直到该地址和所有子地址的指定资源都下载完毕为止。下面开始逐步分析爬虫的实现。1. 待下载集合与已下载集合为了保存需要下载的URL,同时防止重复下载,我们需要分别用了两个集合来存放将要下载的URL和已经下载的URL。因为在保存URL的同时需要保存与URL相关的一些其他信息,如深度,所以这里我采用了Dictionary来存放这些URL。具体类型是Dictionary<string, int> 其中string是Url字符串,int是 阅读全文
posted @ 2012-06-16 22:48 有来 有去 阅读(85716) 评论(46) 推荐(35) 编辑
摘要: 最近几天因为项目需要编译了一次Webkit,因为其中颇费周折,所以把自己的编译过程的总结分享一下,希望能给大家帮助。参考网站http://www.webkit.org/1. 编译环境的搭建(1)Visual Studio由于官方指导上面说:暂不支持VS2005以后的版本(newer versions of Visual Studio are currently unsupported)所以为了避免出现不可预料的错误,果断放弃了VS2010,新建了一个Win7虚拟机,装上了VS2005 Team Suite CHS接下来安装VS2005的各种补丁Microsoft Visual Studio 2 阅读全文
posted @ 2012-06-06 00:37 有来 有去 阅读(11830) 评论(4) 推荐(1) 编辑
Copyright ©2013 Jiajun. All Rights Reserved.