// ==UserScript== // @name Search By Image // @version 1.3.8 // @description Search By Image | 以图搜图 // @match // @include * // @author 864907600cc // @icon http://1.gravatar.com/avatar/147834caf9ccb0a66b2505c753747867 // @run-at document-start // @grant GM_getValue // @grant GM_setValue // @grant GM_openInTab // @grant GM_registerMenuCommand // @namespace http://ext.ccloli.com // @downloadURL none // ==/UserScript== // 本脚本基于 GPLv3 协议开源 http://www.gnu.org/licenses/gpl.html‎ // (c) 86497600cc. Some Rights Reserved. // Default setting: Press Ctrl and click right key on a image to search. 'use strict'; var default_setting={ "site_list":{ "Google":"https://www.google.com/searchbyimage?image_url={%s}", "Baidu ShiTu":"http://stu.baidu.com/i?ct=1&tn=baiduimage&objurl={%s}", "Baidu Image":"http://image.baidu.com/i?rainbow=1&ct=1&tn=shituresultpc&objurl={%s}", "Bing":"http://cn.bing.com/images/searchbyimage?FORM=IRSBIQ&cbir=sbi&imgurl={%s}", "TinEye":"http://www.tineye.com/search?url={%s}", //"Cydral":"http://www.cydral.com/#url={%s}", "Яндекс (Yandex)":"http://yandex.ru/images/search?rpt=imageview&img_url={%s}", "Sogou":"http://pic.sogou.com/ris?query={%s}", "360 ShiTu":"http://st.so.com/stu?imgurl={%s}", "SauceNAO":"http://saucenao.com/search.php?db=999&url={%s}", "IQDB":"http://iqdb.org/?url={%s}", "3D IQDB":"http://3d.iqdb.org/?url={%s}" }, "site_option":["Google","Baidu ShiTu","Baidu Image","Bing","TinEye","Яндекс (Yandex)","Sogou","360 ShiTu","SauceNAO","IQDB","3D IQDB"], "hot_key":"ctrlKey" // Can be set as one of these: "ctrlKey", "shiftKey", "altKey". Default setting is "ctrlKey". } var search_panel=null; var setting=GM_getValue('setting')?JSON.parse(GM_getValue('setting')):default_setting; var disable_contextmenu=false; var img_src=null; var data_version=GM_getValue('version',0); var last_update=GM_getValue('timestamp',0); function set_setting(data){ GM_setValue('setting',JSON.stringify(data)); GM_setValue('timestamp',new Date().getTime()); } function create_panel(){ search_panel=document.createElement('div'); search_panel.style.cssText='width:198px;font-size:14px;text-align:center;position:absolute;color:#000;z-index:9999999999;box-shadow:2px 2px 3px rgba(0,0,0,0.5);border:1px solid #CCC;background:rgba(255,255,255,0.9);border-top-right-radius:2px;border-bottom-left-radius:2px;font-family:"Arial";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none'; document.body.appendChild(search_panel); var search_item=document.createElement('div'); search_item.style.cssText='width:100%;height:24px;line-height:24px;cursor:pointer'; search_item.className='image-search-item'; for(var i in setting.site_list){ var search_item_child=search_item.cloneNode(true); search_item_child.textContent=i; search_item_child.setAttribute('search-option',i); search_panel.appendChild(search_item_child); } search_item.textContent='All'; search_item.setAttribute('search-option','all'); search_panel.appendChild(search_item); var search_item_setting=search_item.cloneNode(true); search_item_setting.textContent='Setting'; search_item_setting.setAttribute('search-option','setting'); search_panel.appendChild(search_item_setting); } function call_setting(){ var setting_panel=document.createElement('div'); setting_panel.style.cssText='width:520px;font-size:14px;position:fixed;color:#000;z-index:9999999999;box-shadow:2px 2px 3px rgba(0,0,0,0.5);border:1px solid #CCC;background:rgba(255,255,255,0.9);border-top-right-radius:2px;border-bottom-left-radius:2px;padding:10px;left:0;right:0;top:0;bottom:0;margin:auto;font-family:"Arial";height:400px;max-height:90%;overflow:auto;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none'; document.body.appendChild(setting_panel); var setting_header=document.createElement('div'); setting_header.style.cssText='width:100%;height:32px;line-height:32px;font-size:18px;line-height:32px'; setting_header.className='image-search-setting-header'; setting_header.textContent='Search By Image Setting'; setting_panel.appendChild(setting_header); var setting_item=document.createElement('div'); setting_item.style.cssText='width:100%;height:24px;line-height:24px;margin:1px 0'; setting_item.className='image-search-setting-title'; setting_item.innerHTML='
多搜
名称
地址(图片地址以 {%s} 代替)
'; setting_panel.appendChild(setting_item); for(var i in setting.site_list){ var setting_item_child=setting_item.cloneNode(true); setting_item_child.className='image-search-setting-item'; setting_item_child.innerHTML='
=0?' checked="checked"':'')+'>
×
'; setting_panel.appendChild(setting_item_child); setting_item_child.getElementsByTagName('div')[3].onclick=function(){this.parentElement.outerHTML='';}; } var setting_footer=document.createElement('div'); setting_footer.style.cssText='width:100%;height:32px;line-height:32px;margin-top:5px;text-align:right'; setting_footer.className='image-search-setting-footer'; setting_panel.appendChild(setting_footer); var setting_hotkey=document.createElement('div'); var setting_add=document.createElement('div'); var setting_reset=document.createElement('div'); var setting_save=document.createElement('div'); var setting_cancel=document.createElement('div'); setting_hotkey.style.cssText='height:32px;display:inline-block;text-align:left;float:left'; setting_add.style.cssText='width:90px;height:32px;margin:0 5px;background:#666;color:#FFF;display:inline-block;text-align:center;cursor:pointer'; setting_reset.style.cssText='width:90px;height:32px;background:#666;color:#FFF;display:inline-block;text-align:center;cursor:pointer'; setting_save.style.cssText='width:90px;height:32px;margin:0 5px;background:#666;color:#FFF;display:inline-block;text-align:center;cursor:pointer'; setting_cancel.style.cssText='width:90px;height:32px;background:#666;color:#FFF;display:inline-block;text-align:center;cursor:pointer'; setting_add.textContent='Add Item'; setting_reset.textContent='Reset'; setting_save.textContent='Save'; setting_cancel.textContent='Cancel'; setting_hotkey.innerHTML='Hot Key '; setting_footer.appendChild(setting_hotkey); setting_footer.appendChild(setting_add); setting_footer.appendChild(setting_reset); setting_footer.appendChild(setting_save); setting_footer.appendChild(setting_cancel); setting_add.onclick=function(){ var setting_item_child=setting_item.cloneNode(true); setting_item_child.className='image-search-setting-item'; setting_item_child.innerHTML='
×
'; setting_panel.insertBefore(setting_item_child,setting_footer); setting_item_child.getElementsByTagName('div')[3].onclick=function(){this.parentElement.outerHTML='';} setting_panel.scrollTop=setting_panel.scrollHeight; }; setting_reset.onclick=function(){ if(confirm('确定将所有设置初始化么?\n\n(初始化将清除所有所有设置,且不可逆)')==true){ setting=default_setting; set_setting(setting); setting_panel.outerHTML=''; if(search_panel!=null){ search_panel.outerHTML=''; search_panel=null; } call_setting(); } }; setting_save.onclick=function(){ var setting_items=document.getElementsByClassName('image-search-setting-item'); var setting_data={"site_list":{},"site_option":[],"hot_key":null}; for(var i=0;i>\nevent.ctrlKey: '+event.ctrlKey+'\nevent.button: '+event.button+'\nevent.target.tagName: '+event.target.tagName+'\nevent.target.src: '+event.target.src+'\nevent.pageX: '+event.pageX+'\nevent.pageY: '+event.pageY+'\ndocument.documentElement.clientWidth: '+document.documentElement.clientWidth+'\ndocument.documentElement.clientHeight: '+document.documentElement.clientHeight+'\ndocument.documentElement.scrollWidth: '+document.documentElement.scrollWidth+'\ndocument.documentElement.scrollHeight: '+document.documentElement.scrollHeight+'\ndocument.documentElement.scrollLeft: '+document.documentElement.scrollLeft+'\ndocument.documentElement.scrollTop: '+document.documentElement.scrollTop); if(disable_contextmenu==true){ document.oncontextmenu=null; disable_contextmenu=false; } if(event[setting.hot_key]==true&&event.button==2&&event.target.tagName.toLowerCase()=='img'&&event.target.src!=null){ if(event.target.src.match(/^data:.*?;base64,/)!=null)alert('Sorry, this image\'s url is a base64 string. For all the search engines don\'t support base64 url, you can\'t search it.\n很抱歉,这个图片的地址是 base64 形式。由于所有的搜索引擎都不支持 base64 形式的地址,您不能搜索该图片。'); else{ if(search_panel==null)create_panel(); else if(last_update!=GM_getValue('timestamp',0)){ last_update=GM_getValue('timestamp',0) search_panel.outerHTML=''; setting=GM_getValue('setting')?JSON.parse(GM_getValue('setting')):default_setting; create_panel(); } else search_panel.style.display='block'; search_panel.style.left=(document.documentElement.clientWidth+document.body.scrollLeft-event.pageX>=200?event.pageX:event.pageX>=200?event.pageX-200:0)+'px'; search_panel.style.top=(document.documentElement.scrollHeight-event.pageY>=search_panel.scrollHeight?event.pageY:event.pageY>=search_panel.scrollHeight?event.pageY-search_panel.scrollHeight:0)+'px'; img_src=event.target.src; disable_contextmenu=true; //for(var i=0;i=0;i--)GM_openInTab(setting.site_list[setting.site_option[i]].replace(/\{%s\}/,encodeURIComponent(img_src))); else if(event.target.getAttribute('search-option')=='setting')call_setting(); else GM_openInTab(setting.site_list[event.target.getAttribute('search-option')].replace(/\{%s\}/,encodeURIComponent(img_src))); } if(search_panel!=null)search_panel.style.display='none'; } },false); if(data_version==0){ alert('Notice:\nSearch By Image has been updated. In order to add new search engines, we have reset the setting. If you have edited the setting, please edit it again. Sorry for that & thanks for using.\nSearch By Image 已更新。由于添加了新的搜索引擎,我们重置了脚本的设置。如果您对脚本的设置进行过修改,请重新进行设置。对覆盖设置的行为,我们表示抱歉。同时感谢您的使用。'); data_version=1; GM_setValue('version',1); setting=default_setting; set_setting(default_setting); } GM_registerMenuCommand('Search By Image Setting',call_setting);