从cef-chromium源码中寻找网页链接点击事件

本人现在有一个利用libcef的软件,想寻找网页链接点击事件的方法,又不想利用JS,因为页面太多。于是想到了这个方法,

记录下来,以便日后再需时查看,也方便有此需求的人。

前提是你已经编译了cef-chromium的源码,cefbuilds下载的只是已经编译好的libcef库和调用接口,

因此得真正的编译cef和chromium的源码,才能找到解决办法。

如果你还没编译成功,请看这篇:

从源码编译cef-chromium的正确步骤


当编译好cef-chromium的源码后,就可以开始找网页链接点击事件了。

因为是点击,所以chromium源码中应该包含click事件,本人不才,是通过click这个字符串搜索的,最后居然也找到了,

网页链接点击事件是在WebKit的html事件中处理的。

我的cef-chromium源码在E盘,具体目录为:

E:\cef-chromium\chromium\src\third_party\WebKit\Source\core\html\HTMLAnchorElement.cpp

在HTMLAnchorElement.cpp中有这么一个成员函数:

void HTMLAnchorElement::handleClick(Event* event)
{
    event->setDefaultHandled();

    LocalFrame* frame = document().frame();
    if (!frame)
        return;

    StringBuilder url;
    url.append(stripLeadingAndTrailingHTMLSpaces(fastGetAttribute(hrefAttr)));
    appendServerMapMousePosition(url, event);
    KURL completedURL = document().completeURL(url.toString());

...

这个handleClick成员函数便是处理网页超链接点击的方法,


KURL completedURL = document().completeURL(url.toString());


这个url.toString()就是点击的链接地址,在这句下面处理获取到的地址就可以了,如果不想让网页加载,直接在获取到链接地址后return即可。


这个url.toString()返回的是String类型,它是定义在chromium内的,想转换链接地址到char*可以用这个方法:

const char* sUtf8Data = url.toString().utf8().data();
有一点要注意,转换后的sUtf8Data是utf8类型的字符串。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值