搜索引擎跳转

简单的搜索引擎跳转

目前为 2017-08-19 提交的版本。查看 最新版本

  // ==UserScript==
  // @name         搜索引擎跳转
  // @namespace    http://tampermonkey.net/
  // @version      0.3
  // @description  简单的搜索引擎跳转
  // @author       tgxh
  // @include	http://*
  // @include	https://*
  // @match   *://*/*
  // @grant        none
  // ==/UserScript==

  (function (window, document) {
    'use strict';

    let href = window.location.href,
      css = ''
      , styles = `
      .t_search_list {
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
      }
      
      .t_search_list a {
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        -webkit-box-align: center;
        -ms-flex-align: center;
        align-items: center;
        margin-right: 10px;
        font-size: 16px;
        color: #666 !important;
        text-decoration: none;
      }
      
      .t_search_list a:hover {
        background-color: #fff !important;
      }
      
      .t_search_list a > img {
        margin-right: 2px;
        width: 16px;
        height: 16px;
      }
      body.vasq #hdtbMenus.hdtb-td-o {
        top: 90px !important;
      }
    `

    /*
    * name:显示名字
    * url:页面url匹配正则
    * id:输入框id
    * selector:插入位置选择器,jquery写法
    * link:跳转的搜索链接,用%s代替搜索关键词
    * icon:base64图标,20×20 */
    let siteInfos = [
      {
        name: 'Google',
        url: /^https?:\/\/(www|encrypted)\.google(?:\.\D{1,3}){1,2}\/(webhp|search|#|$|\?)/i,
        id: '#lst-ib',
        selector: '#before-appbar',
        link: 'https://www.google.com/search?hl=zh-CN&safe=off&q=%s',
        icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAOESURBVDhPjZRdaBxVFMf/985sZjeT3UmTzbY0Lbam8aFqQSWGhiSCsQVF2hIoiG0pRfzAjycDJVA0oIhCS0pSHwwpVTTSir4IfaoWjMQmxEqFNg9Vmuajgexmd5M02dnd2ZnruXdna74s/nbP7uWcM/8599wzwwSBDcgOXkX+2iCcP6/DjcfJI6DVxBB48mmUNT+HYGtbMXEN6wRzI0OYP/kexHwazDDAgiEwXVcxUShA5LLwsjY0qwrW6c9hNOxVsRLc/1csfvohUq8eAGOAFq0BD0dooUG4rjK55hVh6NEYrTkS+5uQ+f5b/+oiDwQXP+tCZuAC9J11YJoOWbiXnFP/LGKBW5UQdCPlo3wvnYJ57ARCL7cXBUrILdtDQ2KmrkrE2xqUzbbsEfd2VYulL/uEMzUhPJlEOPemxNLX/WJ6c0DEDz7ve1ejephsfxzOZBhapQfhOICuIfbz7/4tN0Y4BbBAsbcr4d7cZVhvjyHYmIK7GEBh/C5qrgz74f9mIzEJF7M/AtRv662/YO4bRfj9TjC+cfL/geV/fVQw+w41XKfxKEBrGAQzW/zwv4RfW8DuWk499x1rSC0B3ccMOuXcFMmSGJUpvGogUO+nrKa8jKEiyGEG2TqrIIuEGJL3V4yNvDGjH2kPgyZHmYTRh9PQMmmkVPAECRrbSYxOjJa6mwTs2376amxHIJMTWM5BmZ2nWaT9l1ogPKgqWeHmG4JN94EbwNlkDPaOj9H5zOvFrBW4nkcPR6k2CcOp72z8dMuFaTDEFzz0Hg+BazUH1Cl3pJvQnduHT0b7qHRyrEHjsjulDReFB37LKzFZaaUJ7NrCaZ+xF3FwqQ0XM48gptmos2rReOmwuuBhHDmXx9bK4hHIx7za1LCtSgrSt6P5NOzlvynEEKAZLAgX1X2N+OLmRUzen1EXSWYzc7g8cQW7+9/E7cQ8ynmYvALTKYEzR6lnxIPXV9dIL86P/YAt5VEVkO5kdh6bDAuRMlOd5LKTQcJOwwoGoNHMRsZ7kUrU43CTi1OH1ghKukZ60HPjG+yI1FLPNOXz6PhkjyRyRLicD8KjXYzbN3B001foOdSqfJJ1L9ihmT/w7i8fIZ1dgKGXIaQZ0P1HUbYi5+ZVpRUBEx88+w5eeewlFSuxTrDE1alhDM6M4np8DLPLCfUujAar8ES0Hi/U7kXT1qcQplasBvgH1qCFGHJd9A0AAAAASUVORK5CYII='
      },
      {
        name: 'Baidu',
        url: /^https?:\/\/www\.baidu\.com\/(?:s|baidu)/i,
        id: '#kw',
        selector: '#wrapper_wrapper',
        link: 'https://www.baidu.com/s?wd=%s',
        icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAA3NCSVQICAjb4U/gAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABxUlEQVQ4T62VoasCQRDG971g0CLIgSIWk9rshxabqMH/wCZoFbxo1mQ+o8Fss4kIYhFsYjNqsoggzLsZd+ftnXv6wvvB8GZm5/v23d5yfoGHCGEymYjVaiVOpxPVmUxG2LYtWq0W1UbQMEilUsFN3gbOmPAZbjYbo/hdoEaHDU1m3W6X1nK5HNXxeBzG4/HLnG7KhsEhDMXxePTV6/U6dJaysDNTXC4XKBaLsnoSnFVnSip9AR9zuVxSfj6faWg4HIJlWZQjo9HIp1GBCNd1uRGNRqmJbLdb6jWbTV7HHDeMxWK03ul0eA2DvLw7xY1arSbtAB6PB/fxpaTTaa4Ph4OcAshms9wnr+D5KebzOdX4+IrBYEC96/UqOwCNRoO15BU0TKVSz528vN/vS9kv+XweptOprAAikQhryUt/ZD16vZ6UvIKbFgoFupe6hrz0l6JC/w/CKJfLLzrywkW9WSqVSPAXEomET4t8ewmeI/4hPEOZfaZarcpM8yBbD0wxksmk7HwGL7vSKTjTPw71eh32+z3sdjuYzWb0ghzHgcViAff7HW63G7TbbZ43fhwQ0xfnU+hmiM9QEbybpsAZE//8EyDED1pMSqJthJ2mAAAAAElFTkSuQmCC'
      },
      {
        name: 'Bing',
        url: /^https?:\/\/.*\.bing\.com\/search\?/i,
        id: '#sb_form_q',
        selector: '#b_tween',
        link: 'http://cn.bing.com/search?q=%s',
        icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAY1BMVEUAAAAAg3MAgnQAg3MAhHMAhnAAhHIAh3AAiW8AhXIAhHMAiG8AhHMAg3MAgXcAhnAAgnQAhHMAhXIAhXIAhnEAiW4AhnIAhXIAh3AAhnAAhHQAnV0Aim0AgHYAg3MAgnQAf3ZXmxj4AAAAHnRSTlMAlwnw2ZGJhBPe0zs2MSol+u3Lwri1pZxrakxCBAHnfGw/AAAAf0lEQVQY06XQxw6DQAwEUMNWenqPh///ysgrBZldbvjkeQdrZCJyNkyUTwXgXCAzo95A3onfri6RPLu+wDgDTZiym1cwgPY5aHzPkMKoNNLgjrKtkT4WBQaIQSG9TCL2/YLmlAiX+K8kOVHTLeW9QbLDg9TEm/S+5z8ZWzuq+APjIhCFQMo26AAAAABJRU5ErkJggg=='
      },
      {
        name: 'Zhihu',
        url: /^https?:\/\/www\.zhihu\.com\/search\?/i,
        id: '#q',
        selector: '.zg-wrap.zu-main',
        link: 'https://www.zhihu.com/search?type=content&q=%s',
        icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAyVBMVEUAAAAPiPAPiOsNiewPh+sOiO0PiOwPiesMiu8QiOoNiuwNh+4OiewPhu4PiOwNiO0PiOsQieoPh+wPiOsPh+wQhusOiewPh+wOi+0QiOoQiOoPiOsNie0Nje0Qf+oPiewOiOwQiOoHhPgJiuwOie0Ok+wPduoOjOwTceYQiOsNj+4RiukMlu4OkewLu/INeegQcuoRkuoHgPIMn+4PnOoKmvEFy/cEqOsMiewJxfUPiOsPiesQh+oRguoQhOoTfugPiO0QdusTdeZlefBFAAAAOnRSTlMAEeQ1jHP7fScDg2QuLB/w6eHY1MixcVpL+NHCpId9d2oaFg0H7+HdzczLuLeoj3dnX15XUU9CNjUiGX7+qQAAAORJREFUGNNlzddSwzAQheFjsGwLl8Td6ZXeO6wkB3j/h0KSGQ+ZfDc78492Be2xxoFQNIdxNEBn43Q2QCCll2eeN0DtkeFNAFdcF0RFcclDmrqaSMGl3qYc2gk5ZoghWBqAiwyaTx9m0BESPbY07uLxX7SotOt95MsF8ymvGFsv+8iIJFl+08cgjuNQuEEcrRZ7N1/bZP+mcduOn8zv4l/k6ur85w2YU2Lj0K6pF3yrT8zVMxBElAJYya813tUFZlI0ZUv2Zba7B3B3hqgatWLGqhrR6e4Ghrk3nTgwwvIBvW03fgEtdxsaMJPDZQAAAABJRU5ErkJggg=='
      },
      {
        name: 'Douban',
        url: /^https?:\/\/www\.douban\.com\/search*/i,
        id: 'input[name="q"]:not(#inp-query)',
        selector: '.article',
        link: 'https://www.douban.com/search?q=%s',
        icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAolBMVEUAAAB+v2J6t2dbmE+CwGdXlEt+v2CBwWWCwWVZnFFYm09WlUyAwmKDxGSDxGRoqFVUkElUlkt8vF9/wGF2u16CwmaDwmaBwmSBwmNkolJblUyCwmN5uV5/v2KAwWODw2Vsq1ZrqVZ+v2N1uF9npFN/v2R/vmR6tmd6uGh/v2NPikeAwWF+wF9/w16Bw2KDxGN9v2CN0GiIyWV6u16JzGeJy2YgFv1YAAAAK3RSTlMAnFoOsxz4x7QYJRbv6NaCEwXs5eDQuq6naTEo3tbOnZmXhX18YF9BORYLIxg7yAAAAK1JREFUGNNtyNcSgjAQheFVJBoQKRaKvZeFJYC+/6sJRDKTwe/qnB/s836gOz3BWuSom66bmOrq6Js+6NrwGGru0JhllCmUOW2cpGykTNOxjGIOyu5f3KrogDLrYuoYShdXKCr8qUS2lJEIMW8hEsnoJfi5eGbNjktKPJDcIpBjUxxACQoXanHB5Dc454ZbomXbFnsfX5ybBkSISExQjpiTYFTfCELsCeE66Ll9AeogHP6ZE4gWAAAAAElFTkSuQmCC'
      },
      {
        name: 'Taobao',
        url: /^https?:\/\/s\.taobao.com\/search*/i,
        id: '#q',
        selector: '.grid-total:nth-of-type(3)',
        link: 'https://s.taobao.com/search?q=%s',
        icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAyVBMVEUAAAD/QQD/PwD/QgD/PwD/QgD/QwD/QgD/QwD/QgD/QwD/QQD/PgD/QgD/QQD/QgD/RgD/PQD/QwD/QgD/QQD/QwD/QQD/SgD/QgD/QgD/QwD/PgD/QAD/QwD/QgD/QgD/RQD/QgD/QAD/QwD/QwD/RwD/OgD/RAD/QAD/PwD/UAD/RQD/PwD/OwD/TgD/QgD/QgD/QAD/NQD/PgD/RgD/NQD/QQD/OQD/QwD/NQD/QQD/RAD/LQD/PwD/OgD/QgD/QAD/RQD/PQBcumVlAAAAP3RSTlMA67aIGfbwnHJZRQ8L4NnWzMG7sqCXg2hmYD87LPrl0cGopY56T0k2NCkWAu/j4uHa19KvrJuain96VCYYEwRAliStAAAA5klEQVQY05WQR7LCQBBDezxOOAdwJmf4OWfNcP9D/cEuL1iinVRPqq6mqzSoiOzN4SLLwH5IGlty68Iu910ogHUF+XwrgTEQNW3bjF0GwP9yleMQegcnWFhY9sVcgRiQGdMjZvM0DKe7ieBEhZTvRE8yA2BZbw3DSPG6hpqiNU0QKecBw3YGq1/fxFkm295j0W2X3sapGR4cbntGR87wpzGbfGhkBGS0m6OTRnenFwoQDoFyiozcVyH39CkFAJHw8SoQOVUCscLzeWIVjUffS0A/X+T0r9EVjJvWHo99eOBp+rGjK/QP7eUe3eatJugAAAAASUVORK5CYII='
      }
    ]

    /*
    * id:输入框的id
    * selector:插入位置的选择器,jquery写法
    * type:插入方式appendChild、insertFirst,分别是selector的子元素第一个和最后的位置
    * css:搜索条自定义样式*/
    function createList(id, selector, css, type, before) {
      let word = document.querySelector(id).getAttribute('value')
      // debugger
      let styleEle = document.createElement('style')
      styleEle.innerHTML = styles
      document.querySelector('head').appendChild(styleEle)

      let wrap = document.createElement('div')
      wrap.className = 't_search_wrap'
      wrap.style.cssText += css
      wrap.innerHTML = '<div class="t_search_list"></div>'

      switch (type) { //插入方式,可以自定义
        case 'appendChild':
          document.querySelector(selector).appendChild(wrap)
          break
        case 'insertFirst':
          let p = document.querySelector(selector)
          p.insertBefore(wrap, p.firstChild)
          break
        case 'insertBefore':
          let q = document.querySelector(selector)
          q.insertBefore(wrap, q.querySelector(before))
        default:
          break
      }

      let listele = document.querySelector('.t_search_list')
      listele.innerHTML = `<a href=""></a>`.repeat(siteInfos.length)
      let linklist = listele.querySelectorAll('.t_search_list a')
      linklist.forEach((item, i) => {
        item.innerHTML = `<img src="${siteInfos[i].icon}">${siteInfos[i].name}`
        item.href = siteInfos[i].link.replace(/%s/, word)
      })
    }

    function init() {
      siteInfos.some(item => {
        if (item.url.test(href)) {
          switch (item.name) {
            case 'Google':
              css = 'padding-left: 165px; padding-top: 10px;'
              createList(item.id, item.selector, css, 'appendChild')
              break
            case 'Baidu':
              css = 'padding-left: 121px; padding-top: 10px;'
              createList(item.id, item.selector, css, 'insertFirst')
              break
            case 'Zhihu':
              css = 'margin-top: -15px; margin-bottom: 10px;'
              createList(item.id, item.selector, css, 'insertFirst')
              break
            case 'Bing':
              css = 'margin-top: -18px;margin-bottom: 5px;'
              createList(item.id, item.selector, css, 'insertFirst')
              break
            case 'Douban':
              css = 'margin-top: -20px;margin-bottom: 8px;'
              createList(item.id, item.selector, css, 'insertBefore', '.search-cate')
              break
            case 'Taobao':
              css = 'padding-left: 258px;margin-top: 5px;'
              createList(item.id, item.selector, css, 'insertFirst')
            default:
              break
          }
          return true
        }
      })
    }

    window.addEventListener('load', init, false)
  })(window, document);