
Just a personal work, maybe not suit you.
| Install via Chrome web store | Install via Greasyfork | Install via Firefox addons |
|---|---|---|



? hoothin.github.io
? search.hoothin.com
You can also download the source code, double-click start.cmd to compile, then enter the config page through localhost:3000
亦可下载源码到本地后双击start.cmd ,透过npm 编译后访问localhost:3000 进入配置
Please help with localizing this extension[1][2] to the language you are familiar with!
完全开源,无任何隐私收集、广告或者乱七八糟的第三方库,所有数据均在本地,无任何服务器交互
可以搜寻图片、连结、视频、音频、页面等(在相应对象上长按右键)
支援任意页面划词搜寻(需要长按右键,亦可在设置中改为划选立即调出)
支援站内搜寻
可随意使用快捷键(单个按键或者组合按键)开启搜寻(比如alt+g 谷歌搜寻,可随意自定义)
滑鼠右键单击类别图标批量打开同一类别
shift + left click on category icon to open batches in new window按住
shift左键单击类别图标在新窗口批量打开
ctrl + left click on category icon to open in background TAB按住
ctrl左键单击类别图标以后台标签页批量打开
alt + left-click a category icon to batch open multiple separate windows按住
alt左键单击类别图标以多个单独窗口批量打开
ctrl + shift + left click on category icon to open batches in incognito window按住
ctrl + shift左键单击类别图标在隐身窗口批量打开
alt + shift + left click on category icon to open batches embedding按住
alt + shift左键单击类别图标批量嵌入打开
shift + left click on site icon to open in new window按住
shift左键单击站点以新窗口打开结果页
ctrl + (left click/shortcut/drag) on site icon to open in background TAB按住
ctrl(左键单击/快捷键/拖拽)站点以后台标签页打开结果页
alt + (left click/shortcut/drag) on site icon to preview in small window按住
alt(左键单击/快捷键/拖拽)站点以小窗口预览结果
ctrl + shift + (left click/shortcut/drag) single site/press shortcut key to open in incognito window.按住
ctrl + shift(左键单击/快捷键/拖拽)站点以隐身窗口打开
ctrl + enter to search without lock.没有选择文字或者图片时透过唤出快捷键可唤出站点搜寻框,搜寻站点后按下回车可锁定站点并输入搜寻词,再次回车使用第一个结果搜寻,ctrl+回车无需锁定即可快捷打开,适用于静态书签。
可以透过正则设置类别仅在指定站点显示
右键点击小萌脸彻底隐藏工具栏
左键点击小萌脸打开配置页
可随意拖拽小萌脸,并随意选择位置放置,例如上中,下中,左上,右上,上左,上右等
支援配置导出与快捷分享
支援中键后台打开连结
支援自定义样式
支援全字符编码
支援Post、页内post 以及无跳转post
全面的自定义功能,详见最下方【搜寻参数】
无第三方依赖库
自展开当前类别并提前
不篡改原始页面
拖拽搜寻当前分类(文字/图片/链接),内圈为当前分类前6个站点,外圈为最近使用的10个站点,可透过编辑第一个(文字/图片/链接)分类来自定义内容



| param | details | 详述 |
|---|---|---|
%s | search keyword | ?️ 搜寻关键词 |
%S | cached search keyword | ?️ 最近一次的搜寻关键词 |
%sl | search keyword with lower case letters | ?️ 小写字母搜寻词 |
%su | search keyword with upper case letters | ?️ 大写字母搜寻词 |
%u | current website url | ?️ 当前网站url |
%h | current website host | ?️ 当前网站host |
%t | target src | ?️ 指向对象的src |
%i | base64 of target image | ?️ 指向图片的base64 |
%s.replace | replace keywords with regexp, like %sr.replace(/[^d]/g, "").replace(/(d)/g, "$1 ") means replace raw keywords to numbers and then join all numbers with space, support %s %sl %sr %su %t %u | ?️ 用正则替换搜寻关键词,例如%sr.replace(/[^d]/g, "").replace(/(d)/g, "$1 ") 代表提取原始关键词中所有数字,并以空格分隔,支援%s %sl %sr %su %t %u |
%p{params} | post body, like %p{x=1&y=%s} | ?️ post 参数体,例如%p{x=1&y=%s} |
%P{params} | post without navigation | ?️ post 但不跳转 |
%input{tips} | input something, like %input{love who?,you} | ?️ 输入占位,例如%input{请输入您的三围,90 55 90} |
#p{params} | post in page, like #p{ #input =%u & sleep(500) & click( .submit )}, means: input current url to "#input", then wait for 500ms, then click ".submit". use & = instead of & = in content | ?️ 页内post,可在页面之内使用【css选择器】填写参数提交查询,适用于不开放GET/POST接口的网站,例如#p{ #input =%u & sleep(500) & click( .submit )}, 代表在"#input"内输入指定url,然后等待500毫秒,最后点击".submit"。可在内容中使用& = 来表示& = |
["siteName1","siteName2"] | batch open by site name you've created | ?️ 透过你已经创建的站点名批量打开,例如["雅虎搜寻","谷歌搜寻"] |
%element{} | query element for innerText from selector or xpath, like %element{.mainTitle} | ?️ 透过css 选择器或xpath 抓取元素并返回文字内容,例如%element{.mainTitle} |
%element{}.prop() | return prop value for queried element, like %element{.mainTitle}.prop(href) %element{.mainTitle}.prop(innerHTML) | ?️ 获取抓取到元素的属性值,例如%element{.mainTitle}.prop(href) %element{.mainTitle}.prop(innerHTML) |
%element{}.replace() | replace, same as above, like %element{.mainTitle}.prop(href).replace(/https/i,"") | ?️ 正则替换,例如%element{.mainTitle}.prop(href).replace(/https/i,"") |
# popclip extension for SearchJumper
name : SearchJumper
icon : search filled S
url : https://search.hoothin.com/all#***Select the above text, PopClip will offer an "Install Extension" action. Click it.
https://search.hoothin.com/all?kw=keywords&engine=someengine means search keywords with search engine named someengine and open in new tab.https://search.hoothin.com/all?kw=keywords&engine=someengine&self=1 means search keywords with search engine named someengine and open in current tab. {
"name" : " Open link in text " ,
"url" : " %sr.replace(/(点|。)/g, " . " ).replace(/[^ \ s \ w \ -_ \ .~! \ *';:@&= \ + \ $, \ / \ ?# \ [ \ ]%]/g, "" ).replace(/https: \ / \ /pan \ .baidu \ .com \ /s \ //, "" ).replace(/.*([ \ s::]|^)(1[a-z_0-9]{22,})[ \ s \ S]*? \ b([a-z0-9]{4} \ b|$).*/i, " https://pan.baidu.com/s/$2?pwd=$3 " ).replace(/ /g, "" ).replace(/^/, " http:// " ).replace(/^http: \ / \ /(https?:)/, " $1 " ) " ,
"kwFilter" : " \ w \ S* \ . \ S* \ w| \ w.*[点。].* \ w|1[a-zA-Z0-9]{22,} "
}{
"name" : " Send to phone " ,
"url" : " https://s.hoothin.com/#p{wait(x-peer)&rclick(x-peer)&#textInput=%s&click(#textInput+div>button)} "
}{
"name" : " ⌨️ 按行輸入" ,
"url" : " #p{@=%s[]} "
}{
"name" : " ?USD to RMB " ,
"url" : " showTips:https://api.exchangerate.host/convert?from=USD&to=CNY&amount=1 n {name}<br/><i>%sr USD = {json.result|*%sr.replace(/ \ D/,'')} RMB</i> " ,
"kwFilter" : " \ d \ $| \ $ \ d "
}{
"name" : " ?Currency convert " ,
"url" : " showTips:http://apilayer.net/api/convert?from=%input{From currency/US Dollar/Euro/Japanese Yen/China Yuan,USD/EUR/JPY/CNY}&to=%input{Target currency/US Dollar/Euro/Japanese Yen/China Yuan,USD/EUR/JPY/CNY}&amount=1&access_key=%template{apilayer key} n {name}<br/><i>%sr {json.query.from} = {json.result|*%sr.replace(/ \ D/,'')} {json.query.to}</i> "
}{
"name" : " ? AV預覽" ,
"url" : " showTips:https://www.javbus.com/%sr.replace(/^( \ w+?)[ \ -_]?( \ d+)$/, " $1-$2 " ) n <span style='font-size:22px;line-height:1.2;'>{h3}</span> n <p style= " margin: 0; font-size: 18px; font-weight: normal; " >{.info>p:nth-child(2)}</p> n <p style= " margin: 0; font-size: 18px; font-weight: normal; " >{.info>p:nth-child(6)}</p> n <p style= " margin: 0; " >{.genre a|<mark style= " white-space: nowrap;margin: 5px; font-size: 16px; border-radius: 5px; padding: 2px; box-shadow: 0px 0px 10px 0px #000; " >()</mark>}</p> n <img src='https://www.javbus.com{a.bigImage>img|src}' referrerpolicy='no-referrer'/> " ,
"kwFilter" : " ^[0-9a-zA-Z]+[ \ -_]? \ d+$ "
}{
"name" : " ? Japanese romaji " ,
"url" : " showTips:https://translate.googleapis.com/translate_a/single%p{client=gtx&dt=t&dt=bd&dj=1&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=at&sl=ja&tl=zh_CN&q=%s} n <h3 style='margin: 0;'>{name}</h3> n {json.sentences.all.trans} n <br> n <font style='display: block;' color='antiquewhite'>{json.sentences.all.orig}</font> n <font style='display: block;' color='yellow'>{json.sentences.-1.src_translit}</font> n <span style= " cursor:pointer;color:#f9690e; " data-read= " %sr.replace(/ " /g, " " " ) " data-lang= " ja " data-rate= " 1 " data-volume= " 1 " >?Read</span> " ,
"kwFilter" : " [ \ u3040- \ u309F \ u30A0- \ u30FF] "
}{
"name" : " ? Mile to km " ,
"url" : " showTips: n <i>%sr.replace(/( \ d+)(英里|英?哩|mi(le)?)/, " $1 " ) mi = {%sr.replace(/( \ d+)(英里|英?哩|mi(le)?)/, " $1 " )*1.609344} km</i> " ,
"kwFilter" : " \ d+ \ s*(英里|英?哩|mi(le)? \ b) "
}Click search input box with
ctrl + shift按住ctrl + shiftshift点击当前页面中的搜寻输入框即可
Click the searchJumper face icon in sites list on mycroftproject 点击mycroftproject 上站点列表里的搜寻酱图标即可
Highlight all text URL on any site 在任意网页上高亮文字网址
{
"*" : {
"words" : [
" /(https?: \ / \ /|www \ .)[^ \ s " ' \\ {} \ ( \ ) \ [ \ ]#]+ \ .[^ \ s " ' \\ {} \ ( \ ) \ [ \ ]#]+/i$s{unset;border-radius:unset;border-bottom-width:5px;border-bottom-style:dotted;border-bottom-color:red;}$t{@popup} "
]
}
}Highlight all avID on t66y 在草榴上高亮番号
{
"/^https://t66y \ .com/htm_data//i" : {
"sep" : " # " ,
"words" : [
" /([a-z] \ w+ \ -?| \ d{5,} \ -) \ d{2,}/i$s{unset;border-radius:unset;border-bottom:5px dotted red;}$t{@popup(? AV预览)}$in{.tpc_content} "
]
}
}^https://t66y\.com/htm_data/ with case ignore匹配到草榴网址的正则
^https://t66y\.com/htm_data/后生效,不区分大小写
以#分隔,因为下面的关键词中有空格
首先根据正则"[0-9a-zA-Z]+-d+" 查找番号,然后为高亮词添加style "background:unset;border-bottom:5px dotted red;",最后添加鼠标悬浮弹出搜索弹框的特性
Hide user by target id on xxxx.com 在某个网站上根据给定的用户名或者用户ID 屏蔽元素
{
"@someUserID" : " /12345|54321/l " ,
"@someUserName" : " /jack|adam|rose/i " ,
"/^https://xxxx \ .com/yyyy//i" : {
"sep" : " | " ,
"words" : [
" @someUserID$p{0} " ,
" @someUserName$p{0} "
]
}
}^https://xxxx\.com/yyyy/ with case ignore网址匹配到正则
^https://xxxx\.com/yyyy/后生效,不区分大小写
以|分隔
查找设定在模板@someUserID 中的用户ID (正则后的l 代表筛选连结),然后隐藏连结中含有此ID 的元素,同时查找设定在模板@someUserName 中的用户名并隐藏元素

// search by google
const siteName = 'Google search' ;
const searchJumperEvent = new CustomEvent ( 'searchJumper' , {
detail : {
action : 'search' ,
name : siteName
}
} ) ;
document . dispatchEvent ( searchJumperEvent ) ; const searchJumperEvent = new CustomEvent ( 'searchJumper' , {
detail : {
action : 'show'
}
} ) ;
document . dispatchEvent ( searchJumperEvent ) ; const searchJumperEvent = new CustomEvent ( 'searchJumper' , {
detail : {
action : 'showAll'
}
} ) ;
document . dispatchEvent ( searchJumperEvent ) ; const siteOrder = 2 ;
let currentSite = document . querySelector ( `.search-jumper-type:not(.search-jumper-hide)>a:nth-of-type( ${ siteOrder } )` ) ;
if ( currentSite ) {
const searchJumperEvent = new CustomEvent ( 'searchJumper' , {
detail : {
action : 'search' ,
name : currentSite . dataset . name ,
key : { altKey : true }
}
} ) ;
document . dispatchEvent ( searchJumperEvent ) ;
} const searchJumperEvent = new CustomEvent ( 'searchJumper' , {
detail : {
action : 'search' ,
key : { ctrlKey : true }
}
} ) ;
document . dispatchEvent ( searchJumperEvent ) ; const siteOrder = 2 ;
const searchJumperEvent = new CustomEvent ( 'searchJumper' , {
detail : {
action : 'search' ,
index : siteOrder ,
key : { ctrlKey : true , altKey : true }
}
} ) ;
document . dispatchEvent ( searchJumperEvent ) ; "D:Program Filesluxlux.exe" %u , then submit.D:Program FilesBBDown"D:Program FilesBBDownBBDown.exe" %u -tv ,点击生成注册表补丁Registry patch to call lux by SearchJumper 搜寻酱调用本地程式的注册表补丁
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTlux]
@= " URL:lux Protocol "
" URL Protocol " = " "
[HKEY_CLASSES_ROOTluxDefaultIcon]
@= " cmd.exe,1 "
[HKEY_CLASSES_ROOTluxshell]
[HKEY_CLASSES_ROOTluxshellopen]
[HKEY_CLASSES_ROOTluxshellopencommand]
@= " cmd /c set m=%1 & call set m=%%m:lux://=%% & d: & cd " D:\Program Files\lux " & call lux.exe %%m%% & pause "Modify path by yourself 自行修改补丁中的目录,保存为lux.reg,双击导入注册表。
Open the page of video and download with lux://%u完毕之后即可新建站点使用lux://%u调用lux 下载当前网页视频
config.yml ,内容如下: address: 伺服器地址
port: 伺服器端口
cors:
enabled: true
credentials: true
allowed_headers:
- '*'
allowed_hosts:
- https://hoothin.github.io
allowed_methods:
- '*'
exposed_headers:
- Content-Length
- Content-Range
users:
- username: 用戶名
password: 密碼
scope: webdav 同步文件夾路徑
modify: true
shift + click category icon 
alt + shift + click category icon 
alt + click category icon 