您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Quick search for Google,google image, google scholar, duckduckgo, twitter, GitHub.... You don't need to enter the whole links, you just need to use `g keyword` to google search, `yt keyword`to youtube.com search. and don't worry about like 'yt ' , you just will go to youtube.com. nothing will change.
// ==UserScript== // @name Quick Search // @namespace quick-search // @homepage https://github.com/WhyWhatHow/powertoys4browser // @supportURL https://github.com/WhyWhatHow/powertoys4browser/issues // @author whywhathow // @version 1.9 // @icon https://raw.githubusercontent.com/WhyWhatHow/powertoys4browser/master/icons/quick-search.ico // @description Quick search for Google,google image, google scholar, duckduckgo, twitter, GitHub.... You don't need to enter the whole links, you just need to use `g keyword` to google search, `yt keyword`to youtube.com search. and don't worry about like 'yt ' , you just will go to youtube.com. nothing will change. // @match *://*/* // @grant GM_notification // @license MIT // ==/UserScript== const DEFAULT_SEARCH_ENGINE = "https://www.google.com/search?q="; const searchEngines = {}; /** * 初始化 搜索引擎 配置信息 */ function initSearchEngines() { const jsonData = { "phind": { "shortcut": "ph", "url": "https://phind.com/search?q=" }, "google": { "shortcut": "g", "url": "https://www.google.com/search?q=" }, "googleimages": { "shortcut": "gi", "url": "https://www.google.com/search?tbm=isch&q=" }, "bing": { "shortcut": "b", "url": "https://www.bing.com/search?q=" }, "bingimages": { "shortcut": "bi", "url": "https://www.bing.com/images/search?q=" }, "duckduckgo": { "shortcut": "d", "url": "https://duckduckgo.com/?q=" }, "wikipedia": { "shortcut": "w", "url": "https://wikipedia.org/w/index.php?search=" }, "youtube": { "shortcut": "yt", "url": "https://www.youtube.com/results?search_query=" }, "amazon": { "shortcut": "a", "url": "https://www.amazon.com/s?k=" }, "twitter": { "shortcut": "tw", "url": "https://twitter.com/search?q=" }, "googlescholar": { "shortcut": "s", "url": "https://scholar.google.com/scholar?q=" }, "arxiv": { "shortcut": "x", "url": "https://arxiv.org/search/?query=" }, "ebay": { "shortcut": "e", "url": "https://www.ebay.com/sch/i.html?_nkw=" }, "stackoverflow": { "shortcut": "so", "url": "https://stackoverflow.com/search?q=" }, "github": { "shortcut": "gh", "url": "https://github.com/search?q=" }, "linkedin": { "shortcut": "li", "url": "https://www.linkedin.com/search/results/all/?keywords=" }, "reddit": { "shortcut": "r", "url": "https://www.reddit.com/search/?q=" }, "wolframalpha": { "shortcut": "wa", "url": "https://www.wolframalpha.com/input/?i=" }, "steam": { "shortcut": "st", "url": "https://store.steampowered.com/search/?term=" } }; for (const [key, value] of Object.entries(jsonData)) { searchEngines[value.shortcut] = value.url; } } /*** * 消息通知 */ function showNotification(title, options) { // 检查浏览器是否支持通知 if (!('Notification' in window)) { console.log('浏览器不支持通知'); return; } // 检查通知权限 if (Notification.permission === 'granted') { // 显示通知 const notification = new Notification(title, options); // 点击通知时执行回调函数 if (options && options.onClick) { notification.addEventListener('click', options.onClick); } } else if (Notification.permission !== 'denied') { // 请求通知权限 Notification.requestPermission((permission) => { if (permission === 'granted') { // 显示通知 const notification = new Notification(title, options); // 点击通知时执行回调函数 if (options && options.onClick) { notification.addEventListener('click', options.onClick); } } }); } } /** * 判断是否是readwise 的插件版本 * 是readwise 插件部分 返回true ,不是返回false * @returns {boolean} */ function isReadwise() { var tagName = document.activeElement.tagName; if ("READWISE-TOOLTIP-CONTAINER" === tagName) { console.log("-----------------------true---------------------") return true; } return false; } /** * 判断是否是 需要忽略的部分, 比如说 input textarea, 以及部分browser 插件 example: readwise */ function isIgnored() { if (!isInput() && !isReadwise()) { return true; } return false; } /*** * 光标判断 是否是在输入框 input ,textarea */ function isInput() { var tagName = document.activeElement.tagName; console.log(tagName + "---------------------+"); if (document.activeElement.tagName.toLowerCase() == "input" || document.activeElement.tagName.toLowerCase() == "textarea") { return true; } else if (document.activeElement.tagName.toLowerCase() == "div" && document.activeElement.contentEditable == "true") { return true; } else { return false; } } /** * 获取url的hostname, 即 homepage * @param {string} url */ function gengerateHomepage(url) { const homepageUrl = url.split("/").slice(0, 3).join("/"); return homepageUrl; } /** * // todo user determine open new window, or just default window * 页面跳转 * @param url */ function redirect(url) { console.log("-----------------------------------search url --------------------------"); console.log(url); // todo user determine open new window, or just default window window.location.href = url; // window.open(url, '_blank'); // window.open(url); } /** * 输入窗口判断 */ function running() { console.log("runing........................") // 弹出输入窗口 var search = prompt(" Quick search: ^-_-^ "); // 如果用户输入了内容,则进行搜索 if (search !== null) { var parts = search.trim().split(" "); var engine = parts.shift().toLowerCase(); var keyword = parts.join(" "); // 处理keyword 为空, 直接进行go to home page var url = searchEngines[engine]; if (!url) { // default search url = DEFAULT_SEARCH_ENGINE; keyword = engine; } console.log(url); if (!keyword) { url = gengerateHomepage(searchEngines[engine]); } else { url = searchEngines[engine] + keyword; } showNotification("now searching, please wait.....") redirect(url); } } /** * 1. init search engine * 2. check is in input */ (function () { 'use strict'; console.log('------------------------------------------------------') console.log("---------------------quick search start -------------------") document.addEventListener('keydown', function (event) { if (event.ctrlKey && event.key === 'g') { return; } if (event.altKey && event.shiftKey && event.key === 'g') { return; } if (event.key === 'g' && isIgnored()) { initSearchEngines(); running(); } }, true); })(); // hints : js 匿名hanshu 执行 是 (function(){})();(function(){}) 只是定义了一个匿名函数. fuck!