kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2022-09-22
  • 发帖数9186
  • 经验397枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
阅读:3164回复:9

[求助]Javascript高手帮个忙

楼主#
更多 发布于:2007-10-11 08:27
很喜欢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?)被搜索,造成搜索不到,不知道有没有办法解决?请高人分析一下代码吧,谢谢。
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
GOLF-AT
千年狐狸
千年狐狸
  • UID11611
  • 注册日期2006-02-20
  • 最后登录2019-12-30
  • 发帖数3239
  • 经验265枚
  • 威望1点
  • 贡献值260点
  • 好评度59点
  • 社区居民
  • 忠实会员
1楼#
发布于:2007-10-11 08:27
不会解决。不过我试了一下,确认中文采用的是 UNICODE 编码。
wushi777
非常火狐
非常火狐
  • UID12365
  • 注册日期2006-04-17
  • 最后登录2011-04-13
  • 发帖数817
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
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
web123lai
千年狐狸
千年狐狸
  • UID8036
  • 注册日期2005-08-17
  • 最后登录2019-05-01
  • 发帖数4225
  • 经验13枚
  • 威望1点
  • 贡献值20点
  • 好评度10点
  • 社区居民
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
话说一些论坛需要注册才能搜索,偏偏注册还是封闭的,让人很郁闷
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2022-09-22
  • 发帖数9186
  • 经验397枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
4楼#
发布于:2007-10-11 08:27
Thank y'all~~~
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
5楼#
发布于:2007-10-11 08:27
utf-8 的搜索引擎在 query 使用 encodeURIcomponent 便不会乱码。



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2022-09-22
  • 发帖数9186
  • 经验397枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
6楼#
发布于:2007-10-11 08:27
楼上,找不到这个about:config项啊
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2022-09-22
  • 发帖数9186
  • 经验397枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
7楼#
发布于:2007-10-11 08:27
看了半天代码,我也不知道wushi和web123lai用的是什么特殊的方式来处理中文的,新代码和原代码的区别在哪里呢?

但似乎我在about:config里找到了abc说的那个键值:
network.standard-url.encode-query-utf8
要设置为True

然后Verycd的搜索引擎也能用关键字搜索了
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
wushi777
非常火狐
非常火狐
  • UID12365
  • 注册日期2006-04-17
  • 最后登录2011-04-13
  • 发帖数817
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
8楼#
发布于:2007-10-11 08:27
escape(q.replace(/\"/g,"")) 和 q.replace(/\"/g,"") 的区别。
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
9楼#
发布于:2007-10-11 08:27
kmc:看了半天代码,我也不知道wushi和web123lai用的是什么特殊的方式来处理中文的,新代码和原代码的区别在哪里呢?

但似乎我在about:config里找到了abc说的那个键值:
network.standard-url.encode-query-utf8
要设置为True

然后Verycd的搜索引擎也能用关键字搜索了
回到原帖

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



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
游客

返回顶部