从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类型的字符串。

你可能感兴趣的:(c/c++技术)