搜索引擎老是搜到javaeye上的页面,搜索关键字高亮显示觉得特别有帮助。用google analytics后发现大概80%的流量都是来自搜索引擎。所以觉得也有这个必要实现这个功能。
google到一篇代码,试了试发觉没有作用,可能是浏览器也可以是copy代码没有完整,反正到最后没有成功。不过我看了下代码觉得也挺容易的。关键是document.referrer这个属性。它会记录redirect过来的地址信息。比如搜索引擎就是把搜索的关键字等信息都带过来。
得到搜索关键字只要parse那个连接地址就行了,比较简单。得到关键字后高亮这些内容就行了。也看了之前那本代码,大致看懂了原理,由于这里用了 jquery,想找个现成的插件,结果找到的一些效率实在不敢恭维,页面信息很少的时候确实可以实现,但是内容很多由于纯的replace,非常慢,而且整个替换自后页面整体要重新渲染一遍效果也非常恶心。
自己花了点心思写了个高亮程序。
虽说小bug估计还有,但是初步还算靠谱。
试试google,试试baidu,结果百度搜中文出了问题。
之前说的通过document.referrer得到搜索引擎的信息,拿到搜索关键字,在这个referrer地址中如果出现中文就是以 escape的形式出现的,形如%B3%B2%C4这样的实行,但是baidu过来的信息这里用decodeURIComponent的时候出错了。
发现google过来的一个中文字对应的是%xx * 3的形式,而百度过来的确只有两个。原因是一个unicode编码而baidu用了gb2312编码。js能处理这些gb2312编码的东西不?
研究了一下否决了,发觉js所有的字符都是unicode处理的,比如"xxx".charCodeAt(0)这个方法返回的字符值始终是 unicode的 fromcharcode方法也是只能处理unicode。这么一来发觉只能借助服务器把gb2312的内容转成unicode了。
试试了,成功。
我有在baidu上试试搜javaeye的中文关键字,结果发觉它都没有实现,哈哈哈哈。