谷歌浏览器的源码分析 12

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                当我们根据自动提示,或者完全自己输入连接后,再按下回车键,这时浏览器就会去打开网页,或者去查找内容。那么浏览器是怎么样实现这些功能的呢?又是怎么判断去打开网页,还是去打开GOOGLE的搜索引擎的呢?下面就来分析这部份的代码,如下:

#001  boolAutocompleteEdit::OnKeyDownOnlyWritable(TCHAR key,

#002                                              UINT repeat_count,

#003                                              UINT flags) {

#004    // NOTE: Annoyingly,ctrl-alt-<key> generates WM_KEYDOWN rather than

扫描二维码关注公众号,回复: 4039018 查看本文章

#005    // WM_SYSKEYDOWN, so weneed to check (flags & KF_ALTDOWN) in various places

#006    // in this function evenwith a WM_SYSKEYDOWN handler.

#007 

#008    int count = repeat_count;

#009    switch (key) {

#010      case VK_RETURN:

#011        AcceptInput((flags & KF_ALTDOWN) ?NEW_FOREGROUND_TAB : CURRENT_TAB,

#012                    false);

#013        return true;

#014 

#015      case VK_UP:

#016        count = -count;

#017        // FALL THROUGH

#018      case VK_DOWN:

当用户按下回车键,就会调用上面的函数OnKeyDownOnlyWritable,并且在VK_RETURN按键处理回车的事件,接着就是调用函数AcceptInput来处理。

这个函数的代码如下:

#001  voidAutocompleteEdit::AcceptInput(WindowOpenDisposition disposition,

#002                                    bool for_drop) {

#003    // Get the URL andtransition type for the selected entry.

#004    PageTransition::Typetransition;

#005    boolis_history_what_you_typed_match;

#006    std::wstringalternate_nav_url;

保存当前获取的URL连接串。

#007    const std::wstringurl(GetURLForCurrentText(&transition,

#008                                               &is_history_what_you_typed_match,

#009                                               &alternate_nav_url));

#010    if (url.empty())

#011      return;

#012 

判断是否重新加载当前的网页。

#013    if (url ==permanent_text_) {

#014      // When the user hit enter on the existingpermanent URL, treat it like a

#015      // reload for scoringpurposes.  We could detect this by justchecking

#016      //user_input_in_progress_, but it seems better to treat "edits" thatend

#017      // up leaving the URLunchanged (e.g. deleting the last character and then

#018      // retyping it) asreloads too.

#019      transition =PageTransition::RELOAD;

#020    } else if (for_drop ||((paste_state_ != NONE) &&

#021                           is_history_what_you_typed_match)) {

下面是打开一个新的连接。

#022      // When the user pastedin a URL and hit enter, score it like a link click

#023      // rather than a normaltyped URL, so it doesn't get inline autocompleted

#024      // as aggressivelylater.

#025      transition =PageTransition::LINK;

#026    }

#027 

这里是调用OpenURL函数打开这个连接的内容。

#028    OpenURL(url, disposition,transition, alternate_nav_url,

#029           AutocompletePopupModel::kNoMatch,

#030            is_keyword_hint_ ?std::wstring() : keyword_);

#031  }

这段代码的流程很清楚,就是先通过判断按键输入,是否按下回车键,如果是回车键就调用函数AcceptInput处理,然后在这个函数就判断这个连接是否已经打开了,如果已经打开,只需要重新加载就行了,如果不是当前的,就是打开一个新的连接。下一次再来分析OpenURL函数是怎么样通过连接来重新加载,还是打开一个新网页。

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/uytrrfg/article/details/83935005