阅读:3164回复:9
[求助]Javascript高手帮个忙
很喜欢Google的"site:"搜索语法,有时能比论坛自带的搜索更快地找到需要的内容,但是如果每次都要输入
关键字 site:论坛域名 这样的结构,很是麻烦,就算用复制和粘贴,也要在地址栏精确地选定主域名部分。 以为会有人开发这样的扩展,找来找去发现其实一个Bookmarklet就足够, 在 https://www.squarefree.com/bookmarklets/search.html 这里发现一个google site search(Searches Google for pages on the site containing selected text),代码如下 javascript:q%20=%20""%20+%20(window.getSelection%20?%20window.getSelection()%20:%20document.getSelection%20?%20document.getSelection()%20:%20document.selection.createRange().text);%20if%20(!q)%20q%20=%20prompt("You%20didn't%20select%20any%20text.%20%20Enter%20a%20search%20phrase:",%20"");%20if%20(q!=null)%20location=("http://www.google.com/search?num=100&q=site:"%20+%20escape(location.hostname)%20+%20"%20\""%20+%20escape(q.replace(/\"/g,""))%20+%20"\"").replace(/%20/g,%20"+");%20void%200 (添加的方式有两种,一是在这个页面 https://www.squarefree.com/bookmarklets/search.html 中把那个灰色的“google site search”按钮拖到Firefox的书签工具栏或者书签中,另一种是手动新建书签,把所有的代码作为地址,没有换行) 使用很方便,可以在网页上选定文字后点击这个Bookmarklet,也能直接点击,会提示你输入要搜索的文字。 只是问题在于:中文字符似乎被翻译成了某种代码(Unicode?)被搜索,造成搜索不到,不知道有没有办法解决?请高人分析一下代码吧,谢谢。 |
|
|
1楼#
发布于:2007-10-11 08:27
不会解决。不过我试了一下,确认中文采用的是 UNICODE 编码。
|
|
2楼#
发布于:2007-10-11 08:27
javascript:q = "" + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text); if (!q) q = prompt("You didn't select any text. Enter a search phrase:", ""); if (q!=null) location=("http://www.google.com/search?num=100&q=site:" + escape(location.hostname) + " \"" + q.replace(/\"/g,"") + "\"").replace(/ /g, "+"); void 0 |
|
3楼#
发布于:2007-10-11 08:27
javascript:q = %22%22 + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text); if (!q) q = prompt(%22请输入关键词:%22, %22%22); if (q!=null) {var qlocation=%22 %22;qlocation=(%22http://www.google.com/search?num=100&hl=zh-CN&newwindow=1&q=site:%22 + escape(location.hostname)+%22+%22+q+%22%22);window.open(qlocation);} void 0 以前参照楼主那个还有一个朋友的解释写的,在新窗口打开搜索,不添加引号。 呵呵,之前还真把这个东西做成了扩展,后来发现没啥用,也是改用了Bookmarklet 话说一些论坛需要注册才能搜索,偏偏注册还是封闭的,让人很郁闷 |
|
4楼#
发布于:2007-10-11 08:27
Thank y'all~~~
|
|
|
5楼#
发布于:2007-10-11 08:27
utf-8 的搜索引擎在 query 使用 encodeURIcomponent 便不会乱码。
|
|
|
6楼#
发布于:2007-10-11 08:27
楼上,找不到这个about:config项啊
|
|
|
7楼#
发布于:2007-10-11 08:27
看了半天代码,我也不知道wushi和web123lai用的是什么特殊的方式来处理中文的,新代码和原代码的区别在哪里呢?
但似乎我在about:config里找到了abc说的那个键值: network.standard-url.encode-query-utf8 要设置为True 然后Verycd的搜索引擎也能用关键字搜索了 |
|
|
8楼#
发布于:2007-10-11 08:27
escape(q.replace(/\"/g,"")) 和 q.replace(/\"/g,"") 的区别。
|
|
9楼#
发布于:2007-10-11 08:27
kmc:看了半天代码,我也不知道wushi和web123lai用的是什么特殊的方式来处理中文的,新代码和原代码的区别在哪里呢? encodeURIcomponent is js 功能,会把字串转换成 utf-8 编码,类似 escape 功能。 escape 只支持系统 locale,encodeURIcomponent 则支持所有语言。但 escape 可以在任何编码的引擎使用,encodeURIcomponent 则只能在 utf-8 的引擎使用。 ff 的选项 network.standard-url.encode-query-utf8 是自动进行 encodeURIcomponent 功能,但在非 utf-8 的引擎搜索会出错,还是不要开启。 Googles 是 utf-8 的,可以把整个 search string 用 encodeURIComponent encode: javascript:q = "" + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text); if (!q) q = prompt("You didn't select any text. Enter a search phrase:", ""); if (q!=null) location=("http://www.google.com/search?num=100&q=site:" + encodeURIComponent(location.hostname + " "" + q.replace(/"/g,"") + """).replace(/ /g, "+")); void 0 |
|
|