搜索引擎跳转

简单的搜索引擎跳转

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

// ==UserScript==
// @name         搜索引擎跳转
// @namespace    http://tampermonkey.net/
// @version      0.2
// @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 > 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=='
    }
  ]

  /*
  * id:输入框的id
  * selector:插入位置的选择器,jquery写法
  * type:插入方式appendChild、insertFirst,分别是selector的子元素第一个和最后的位置
  * css:搜索条自定义样式*/
  function createList(id, selector, type, css) {
    let word = document.getElementById(id).getAttribute('value')
    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
      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)
    })
  }

  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, 'appendChild', css)
          break
        case 'Baidu':
          css = 'padding-left: 121px; padding-top: 10px;'
          createList(item.id, item.selector, 'insertFirst', css)
          break
        case 'Zhihu':
          css = 'margin-top: -15px; margin-bottom: 10px;'
          createList(item.id, item.selector, 'insertFirst', css)
          break
        case 'Bing':
          css = 'margin-top: -18px;margin-bottom: 5px;'
          createList(item.id, item.selector, 'insertFirst', css)
          break
        default:
          break
      }
      return true
    }
  })
})(window, document);