站cool

站酷下载脚本!

// ==UserScript==
// @name         站cool
// @namespace    http://tampermonkey.net/
// @version      0.1.1
// @description  站酷下载脚本!
// @author       maYunLaoXi
// @match        *://www.zcool.com.cn/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
  'use strict';
  
  const urlMatch = /\/work\/.*\.html/
  const pushState = window.history.pushState
  window.history.pushState = function (...args) {
    console.log('pushState: ')
    console.log(args)
    pushState(...args)
    const [a, b, url] = args
    if (urlMatch.test(url)) {
      setTimeout(() => {
        getImg()
      }, 1000);
    }
  }
  const jszipDom = document.createElement('script')
  const fComDom = document.createElement('script')

  jszipDom.src = 'https://cdn.staticfile.org/jszip/3.10.1/jszip.min.js'
  fComDom.src = 'https://cdn.jsdelivr.net/npm/[email protected]/dist/f-com.min.js'

  document.body.appendChild(jszipDom)
  document.body.appendChild(fComDom)

  window.addEventListener('load', function() {
    console.log('window loaded')
    if(urlMatch.test(window.location.href)) getImg()
  }, false)
  function getImg() {
    console.log('监听到有图片页面, 注入下载代码')
    const titleDom = document.querySelector('h1[class="contentTitle"]')
    const authDom = document.querySelector('span[color="black3"][title]')
    const timeDom = document.querySelector('span[title*="最近更新时间"]')
    const hotDom = document.querySelector('span[title*="人气"]')

    const imgs = document.querySelectorAll('img[class*="photoImage"]')
  
    const srcs = []
  
    for (let img of imgs) {
      const dataSrc = img.getAttribute('data-src')
      if (dataSrc) srcs.push(dataSrc)
      else srcs.push(img.src)
    }
    // detailNavBox
    const dlBtn = document.createElement('div')
    dlBtn.classList.add('navItem')
    dlBtn.classList.add('detailItem')
    dlBtn.innerHTML = '下载'
  
    const detailNavBox = document.querySelector('.detailNavBox')
    detailNavBox.insertBefore(dlBtn, detailNavBox.childNodes[0])
  
    let dowloading = false
    dlBtn.onclick = () => {
      if (dowloading) {
        alert('正在下载')
        return
      }
      dowloading = true
      console.log(srcs)
      dlBtn.innerText = '下载中'

      const name = `${titleDom.innerText}-${authDom.innerText}`
      const content = `${titleDom.innerText}\n作者:${authDom.innerText}\n链接:${window.location.href}\n${timeDom.getAttribute('title')}\n${hotDom.getAttribute('title')}`
      const removeParams = !!JSON.parse(localStorage.getItem('greascript_zcool_removeParams'))

      fCom.dowloadZip({ src: srcs, JsZip: JSZip, fileName: `${name}.zip`, otherFiles: [{ fileName: `${name}.txt`, content }], removeParams }).then(() => {
        dlBtn.innerText = '下载'
        console.log('下载 successed')
        dowloading = false
      })
    }
  }
})();