我们在上网使用搜索引擎的时候,经常会遇到类似这样的一个问题:从Google上搜索到了一个包含了“税收”的文章,但是打开对应的网站页面时发现这篇文章很长,很难确定税务在文章中的位置,即使使用浏览器的查找功能,也并不爽。那么如何改进信息类网站在此需求上的用户体验呢?一个国外的朋友做了件好事情:http://www.kryogenix.org/code/browser/searchhi/,他在这个页面上提供了一个js,可以很方便的实现我们的需求。但是这个脚本对baidu没有什么效果为什么呢?首先我们看看他的部分代码:
……if (qsip[0] == 'q' || qsip[0] == 'p') { // q= for Google, p= for Yahoowords = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);for (w=0;w<words.length;w++) {highlightWord(document.getElementsByTagName("body")[0],words[w]);}}……
上述代码获取来源地址中q或p的值,q对应的是google的搜索关键字,p是Yahoo的搜索关键字,而且这两个关键字是utf-8编码的,使用js自然可以很方便的处理,但是百度搜索的则有较大不同:搜索关键字的对应的地址参数是wd,且编码为GB2312。如何解决这个问题呢?我这里使用了js结合vbs的办法来解决该问题。
首先我们使用vbs写一个函数解决编码问题:
Function DeCodeAnsi(s)Dim i, sTmp, sResult, sTmp1sResult = ""For i=1 To Len(s)If Mid(s,i,1)="%" ThensTmp = "&H" & Mid(s,i+1,2)If isNumeric(sTmp) ThenIf CInt(sTmp)=0 Theni = i + 2ElseIf CInt(sTmp)>0 And CInt(sTmp)<128 ThensResult = sResult & Chr(sTmp)i = i + 2ElseIf Mid(s,i+3,1)="%" ThensTmp1 = "&H" & Mid(s,i+4,2)If isNumeric(sTmp1) ThensResult = sResult & Chr(CInt(sTmp)*16*16 + CInt(sTmp1))i = i + 5End IfElsesResult = sResult & Chr(sTmp)i = i + 2End IfEnd IfElsesResult = sResult & Mid(s,i,1)End IfElsesResult = sResult & Mid(s,i,1)End IfNextDeCodeAnsi = sResultEnd Function
然后在js中调用这个vbs的函数:if (qsip[0] == 'wd') { // wd= for baiduif(qsip[1]=='') continue;execScript('wd = DeCodeAnsi("'+qsip[1]+'")','vbscript');words = decodeURI(wd.replace(/\+/g,' ')).split(/\s+/);for (w=0;w<words.length;w++) {highlightWord(document.getElementsByTagName("body")[0],words[w]);}}
ok问题解决了。
使用的时候在网页中加上以下两行就好了:
<script src="/searchhi.js" type="text/javascript"></script><script src="/searchhi.vbs" type="text/vbscript"></script>
searchhi.js (2.23 KB)searchhi.vbs (.93 KB)
Page rendered at Sunday, October 12, 2008 2:40:19 AM (China Standard Time, UTC+08:00)
Disclaimer - 这个Blog是我的个人空间,只代表我个人的看法和言论。 - 拒绝在未经过本人许可的情况下在任何商业性出版物品或商业性网站上引用本站文章。 - 欢迎其他Blogger在自己的Blog中引用我的文章,但请注明Trackback URL。 - 鲁ICP备05009011号