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
You can also download the source code to the local area and double-click start.cmd, and access localhost:3000 after compiling through npm to enter the configuration.
Please help with localizing this extension[1][2] to the language you are familiar with!
Fully open source, no privacy collection, advertising or messy third-party libraries, all data is local, no server interaction
You can search for pictures, links, videos, audios, pages, etc. ( Long-press and right-click on the corresponding object)
Supports search for word marking on any page (requires long right-click , or you can change it to select in the settings and call it out immediately)
Support search within the site
You can use shortcut keys (single keys or combination keys) to enable search (such as alt+g Google search, you can customize it at will)
Right-click the category icon to open the same category in batches
shift
+ left click on category icon to open batches in new windowHold
shift
left-click the category icon to open in batches in new window
ctrl
+ left click on category icon to open in background TABHold
ctrl
left-click the category icon background tab page opens in batches
alt
+ left-click a category icon to batch open multiple separate windowsHold
alt
left-click the category icon to open in batches with multiple separate windows
ctrl + shift
+ left click on category icon to open batches in incognito windowHold
ctrl + shift
left-click the category icon opens in batches in the invisible window
alt + shift
+ left click on category icon to open batches embeddedHold
alt + shift
left click category icon batch embed open
shift
+ left click on site icon to open in new windowHold
shift
and left-click the site to open the result page in a new window
ctrl
+ (left click/shortcut/drag) on site icon to open in background TABHold down
ctrl
(left-click/shortcut key/drag) site background tab page to open the result page
alt
+ (left click/shortcut/drag) on site icon to preview in small windowHold down
alt
(left-click/shortcut key/drag) site to preview the results in a small window
ctrl + shift
+ (left click/shortcut/drag) single site/press shortcut key to open in incognito window.Hold
ctrl + shift
(left click/shortcut key/drag) the site opens in the invisible window
ctrl
+ enter to search without lock.When there is no text or picture selection, you can call out the site search box by calling out the shortcut key. After searching for the site, press Enter to lock the site and enter the search term. Enter again to search with the first result. ctrl+Enter can be opened quickly without locking, which is suitable for static bookmarks.
Category can be displayed only on specified sites through regular settings
Right-click Xiao Meng Face to completely hide the toolbar
Left click on Xiao Meng Face to open the configuration page
You can drag and drop the cute face at will and select the position to place it at will, such as upper middle, lower middle, upper left, upper right, upper left, upper right, etc.
Support configuration export and quick sharing
Support mid-key background to open the link
Supports custom styles
Support full character encoding
Supports Post, in-page post and no jump post
Comprehensive customization functions, please see the bottom [Search Parameters]
No third-party dependency library
Expand the current category and advance
No tampering with the original page
Drag and drop to search for the current category (text/picture/link). The inner circle is the first 6 sites in the current category, and the outer circle is the 10 most recently used sites. You can customize the content by editing the first category (text/picture/link)
param | details | Detailed description |
---|---|---|
%s | search keyword | ?️ Search for keywords |
%S | cached search keyword | ?️ The last search keywords |
%sl | search keyword with lower case letters | ?️ Lowercase letter search terms |
%su | search keyword with upper case letters | ?️ Capital letter search terms |
%u | Current website url | ?️ Current website url |
%h | Current website host | ?️ Current website host |
%t | target src | ?️ Src pointing to the object |
%i | base64 of target image | ?️ Point to the base64 of the picture |
%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 %sl %sr %su %t %u | ?️ Replace search keywords with regularity, such as %sr.replace(/[^d]/g, "").replace(/(d)/g, "$1 ") represents extracting all numbers in the original keyword and separating them with spaces, supporting %s %sl %sr %su %t %u |
%p{params} | post body, like %p{x=1&y=%s} | ?️ post parameter body, for example %p{x=1&y=%s} |
%P{params} | post without navigation | ?️ post but not jump |
%input{tips} | input something, like %input{love who?,you} | ?️ Enter the placeholder, for example %input{Please enter your measurement, 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 on the page, you can use the [css selector] to fill in parameters and submit queries on the page. It is suitable for websites that do not open the GET/POST interface, such as #p{ #input =%u & sleep(500) & click( .submit )}, which means that you enter the specified url in "#input", then wait for 500 milliseconds, and finally click ".submit". You can use & = in the content to represent & = |
["siteName1","siteName2"] | batch open by site name you've created | ?️ Open in batches through the site name you have created, such as ["Yahoo Search", "Google Search"] |
%element{} | query element for innerText from selector or xpath, like %element{.mainTitle} | ?️ Crawl elements through css selector or xpath and return text content, such as %element{.mainTitle} |
%element{}.prop() | return prop value for queried element, like %element{.mainTitle}.prop(href) %element{.mainTitle}.prop(innerHTML) | ?️ Get the attribute value of the captured element, for example %element{.mainTitle}.prop(href) %element{.mainTitle}.prop(innerHTML) |
%element{}.replace() | replace, same as above, like %element{.mainTitle}.prop(href).replace(/https/i,"") | ?️ Regular replacement, for example %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
Press and holdctrl + shift
shift Click the search input box in the current page
Click the searchJumper face icon in sites list on mycroftproject Click the search sauce icon in the site list on mycroftproject
Highlight all text URL on any site Highlight text URL on any website
{
"*" : {
"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 Highlight number on Caoliu
{
"/^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 ignoreThe regular
^https://t66y\.com/htm_data/
that matches the Caoliu URL takes effect after it is not case sensitive
Separated by # because there are spaces in the keywords below
First, search for the number according to the regular "[0-9a-zA-Z]+-d+", then add style "background:unset;border-bottom:5px dotted red;" to the highlighted word, and finally add the feature of the mouse suspension pop-up search box
Hide user by target id on xxxx.com Block elements on a website based on a given username or user 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 ignoreThe URL matches the regular
^https://xxxx\.com/yyyy/
and takes effect, and is case-insensitive
Separate by |
Find the user ID set in the template @someUserID (the regular l represents filter link), then hide the element containing this ID in the link, and also find the user name set in the template @someUserName and hide the element
// 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
at the call command, click to generate a registry patchRegistry 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 Modify the directory in the patch, save it as lux.reg, and double-click to import the registry.
Open the page of video and download with lux://%u
after completion, you can create a new site and call lux using lux://%u
to download the current web page video
config.yml
, with the following content: 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