谷歌音乐搜索栏的提示功能php修正代码

2015-01-24信息快讯网

我很喜欢在 google.cn/music 上找 mp3, 因为谷歌音乐在版权方面, 用户体验和搜索功能都做得很好. 但是它的搜索栏提示功能一直存在一个小问题, bug 存在半年以上了吧

问题描述

在加载页面的时候, 将光标快速定位到搜索栏上, 待页面加载完成, 搜索栏进行初始化后会显示搜索提示. 此时输入的任何内容将成为搜索提示的一部分而不是搜索关键字. 截图如下:

谷歌音乐搜索栏的提示功能php修正代码_信息快讯网

导致原因

搜索栏的 JavaScript 初始化执行在 onload 的时候. 因为页面图片请求多, 完全加载需要 3 秒钟左右, 并且搜索栏的 tabindex 被设为 1, 搜索优先的用户很容易就能遇到.

以下是我根据自己的理解反编译出来的 JS 代码, 页面在 onload 的时候将会执行 m.hint.initHint 方法为搜索框添加提示功能.

 
/** 
* 为搜索框添加提示功能 
* @param searchTip 提示信息 
* @param searchBoxId 搜索输入框 ID 
* @param hideBoxId 关键字隐藏框 ID 
*/ 
m.hint.initHint = function(searchTip, searchBoxId, hideBoxId){ 
var searchBox = document.getElementById(searchBoxId); 
var hideBox = null; 
if(searchBox){ 
if(hideBoxId) { 
hideBox = document.getElementById(hideBoxId); 
} 
l.events.listen(searchBox, "blur", l.bind(m.hint.onInputBlur, null, searchBox, hideBox), false); 
l.events.listen(searchBox, "focus", l.bind(m.hint.onInputFocus, null, searchBox, hideBox), false); 
if(hideBox){ 
l.events.listen(searchBox, "change", bind(m.hint.onInputChange, null, searchBox, hideBox), false); 
hideBox.value = m.hint.getInputValue(searchBox); 
} 

// 在这里将搜索提示赋给临时变量 
m.hint.Gh[searchBox] = searchTip; 
// 如果搜索框存在, 则为搜索框加上临时变量和灰色字的 class 
m.hint.onInputBlur(searchBox); 
} 
}; 

m.hint.onInputBlur = function(searchBox, hideBox) { 
m.hint.fi(searchBox); 
hideBox && m.hint.onInputChange(searchBox, hideBox); 
}; 

m.hint.fi = function(searchBox) { 
if(searchBox) { 
var searchTip = m.hint.Gh[searchBox]; 
if(searchTip && (searchBox.value.trim()=="" || searchBox.value==searchTip)) { 
searchBox.setAttribute(m.hint.IS_HINT, "1"); 
searchBox.className += " hint"; 
searchBox.value = searchTip; 
} 
} 
}; 

解决办法
缩短搜索框 DOM 节点加载和 JavaScript 初始化之间的时间. 可以在搜索框加载完成后立刻执行 JS, 反正 Google 自己的产品也不需要 SEO. 当然, 最好在 DOM ready 的时候执行.

扩展知识
记得我写过一篇文章, 介绍如何在 WordPress 搜索框添加文字提示. 我的处理办法简单粗暴, 仅以框内关键字来判断是关键字还是提示信息. (所以我的提示信息很长)

在分析这个案例的过程中, 我发现 Google 的处理办法很好, 可以借鉴和使用. 它通过隐藏输入框来放置真正的搜索信息, 所以可以实现完全关键字和提示文案的区分.

后话
这个小问题已经困扰我很久了 (几乎每次遇到), 今天终于忍不住看了一下代码, 希望 Google 的工程师能够看到本文快速解决掉. (修改建议我都给出来了, 还不改也说不过去吧)

完善CodeIgniter在IDE中代码提示功能的方法
PHP实现的博客欢迎提示功能(很特别哦)
用C/C++扩展你的PHP 为你的php增加功能
php写的带缓存数据功能的mysqli类
php控制linux服务器常用功能 关机 重启 开新站点等
PHP写的获取各搜索蜘蛛爬行记录代码
php+ajax做仿百度搜索下拉自动提示框(有实例)
用PHP+MySQL搭建聊天室功能实例代码
php中数组首字符过滤功能代码
php提示undefined index的几种解决方法
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
php preg_filter执行一个正则表达式搜索和替换
php 搜索框提示(自动完成)实例代码
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
php 冒泡排序 交换排序法
php 随机排序广告的实现代码
PHP的cURL库功能简介 抓取网页、POST数据及其他
php中获取关键词及所属来源搜索引擎名称的代码
php下尝试使用GraphicsMagick的缩略图功能
利用php+mysql来做一个功能强大的在线计算器
php Notice: Undefined index 错误提示解决方法
php简单提示框alert封装函数
为IP查询添加GOOGLE地图功能的代码
phpMyAdmin 链接表的附加功能尚未激活的问题
php网站来路获取代码(针对搜索引擎)
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Search File Contents PHP 搜索目录文本内容的代码
用PHP查询搜索引擎排名位置的代码
php 运行效率总结(提示程序速度)
php利用header函数实现文件下载时直接提示保存
使用zend studio for eclipse不能激活代码提示功能的解决办法
©2014-2024 dbsqp.com