金山词霸生词本采集器

采集金山词霸生词本(scb.iciba.com)上的单词列表

// ==UserScript==
// @name         金山词霸生词本采集器
// @namespace    http://scb.iciba.com/
// @version      0.2
// @description  采集金山词霸生词本(scb.iciba.com)上的单词列表
// @author       Bob Green
// @match        *://*.iciba.com/*
// @grant        none
// ==/UserScript==

(function() {
  'use strict';

  var btnStyles = 'position: fixed; z-index: 1000; bottom: 0; right: 0; ';
  var STORE_KEY = 'wordListCache';

  function set (content) {
    return window.localStorage.setItem(STORE_KEY, content);
  }

  function get () {
    return window.localStorage.getItem(STORE_KEY);
  }

  function render () {
    var wrapElem = document.createElement('div');
    wrapElem.style = btnStyles;
    wrapElem.innerHTML = `
      <style>
        .icibascb_wrapper {
          padding: 1em;
          border-top-left-radius: 0.5em;
          background: rgba(255,255,255,0.8);
        }
        .icibascb_btn {
          margin-right: 0.5em; 
          padding: 0.3em 1em;
          border: solid 1px #40464e;
          border-radius: 0.3em;
          background: #f0f0f0;
          color: #3c4855;
        }
        .icibascb_btn:hover {
          border-color: #4bacf3;
        }
      </style>
      <div class="icibascb_wrapper">
        <button id="icibascb_collect" class="icibascb_btn">收集本页面的单词</button>
        <button id="icibascb_show" class="icibascb_btn">显示已收集的单词</button>
        <button id="icibascb_clear" class="icibascb_btn">清空</button>
      </div>
    `;
    document.body.appendChild(wrapElem);
    wrapElem.querySelector('#icibascb_collect').addEventListener('click', collect);
    wrapElem.querySelector('#icibascb_show').addEventListener('click', showList);
    wrapElem.querySelector('#icibascb_clear').addEventListener('click', clear);
  }

  function collect () {
    var els = document.querySelectorAll('.word');
    var wordList = Array.from(els).map(el => el.innerText);
    var stashCache = get() || '';
    set((stashCache ? (stashCache + '|') : '') + wordList.join('|'));
    window.alert('已收集' + wordList.length + '个单词');
  }

  function clear () {
    set('');
  }

  function showList () {
    var elem = document.createElement('ul');
    var cache = get() || '';
    var wordList = cache.split('|');
    elem.innerHTML = '';
    for (var item of wordList) {
      var newLine = document.createElement('li');
      newLine.innerText = item;
      elem.appendChild(newLine);
    }
    var win = window.open('', 'Word List', 'menubar=no,toolbar=no,location=no,status=no');
    win.document.body.appendChild(elem);
  }

  render();
})();