agefans Enhance

more powerful agefans

目前为 2021-04-08 提交的版本。查看 最新版本

// ==UserScript==
// @name         agefans Enhance
// @namespace    https://github.com/IronKinoko/agefans-enhance
// @version      0.1.12
// @description  more powerful agefans
// @author       IronKinoko
// @match        https://www.agefans.net/play/*
// @match        https://www.agefans.net/detail/*
// @grant        none
// @license      MIT
// ==/UserScript==

;(function () {
  'use strict'

  window.log = console.log
  delete window.console
  document.cookie = 'username=admin; path=/; max-age=99999999;'

  const his = new (class {
    cacheKey = 'view-history'
    his = JSON.parse(localStorage.getItem(this.cacheKey) || '{}')
    getAll() {
      return this.his
    }
    get(key) {
      return this.his[key]
    }
    set(key, value = true) {
      this.his[key] = value
      localStorage.setItem(this.cacheKey, JSON.stringify(this.his))
    }
    has(key) {
      return Boolean(this.his[key])
    }
  })()

  function gotoNextPart() {
    let dom = document.querySelector("li a[style*='color: rgb(238, 0, 0);']")
      .parentElement.nextElementSibling

    if (dom) {
      dom.children[0].click()
    }
  }

  function saveToHistory() {
    const key = location.pathname + location.search
    his.set(key, true)
  }

  function renderHistory() {
    const aEls = document.querySelectorAll('.movurl li a')

    if (aEls.length === 0) return requestAnimationFrame(renderHistory)

    // add a tag visited style
    let styleDom = document.createElement('style')
    styleDom.innerHTML = `.movurl li a:visited { color: red; }`
    document.head.appendChild(styleDom)

    aEls.forEach((a) => {
      const href = a.getAttribute('href')
      if (his.has(href)) {
        a.style.border = '1px solid red'
      }
    })
  }

  function genNextPartBtn() {
    let $0 = document.querySelector('[class^=timetext]')

    let div = document.createElement('div')

    /** @type {CSSStyleDeclaration}*/
    let styles = {
      lineHeight: '38px',
      color: 'rgb(255, 255, 255)',
      fontFamily: 'arial',
      fontSize: '16px',
      paddingLeft: '10px',
      float: 'left',
      overflow: 'hidden',
      cursor: 'pointer',
    }

    Object.entries(styles).forEach(([key, value]) => {
      div.style[key] = value
    })

    div.innerText = '下一集'
    div.onclick = () => {
      parent.postMessage({
        source: 'ckx1',
        code: 2,
        message: 'switch to next part',
      })
    }

    $0.parentNode.insertBefore(div, $0.nextSibling)

    autoPlay()
  }

  function autoPlay() {
    let videoEl = document.querySelector('video')
    videoEl.addEventListener('loadeddata', function () {
      if (videoEl.readyState >= 2) {
        videoEl.play().then(() => {
          log('success palyed')
        })
      }
    })

    let played = false
    const fn = () => {
      if (played) return false
      played = true
      videoEl.onended = () => {
        parent.postMessage({
          source: 'ckx1',
          code: 1,
          message: 'auto switch',
        })
      }
      videoEl.removeEventListener('play', fn)
    }
    videoEl.addEventListener('play', fn)
  }

  function replacePlayer() {
    const dom = document.getElementById('age_playfram')

    const prefix = 'https://ironkinoko.github.io/agefans-enhance/?url='

    const fn = () => {
      let url = new URL(dom.src)

      if (url.hostname.includes('agefans')) {
        let videoURL = url.searchParams.get('url')
        if (videoURL) {
          dom.src = prefix + videoURL
        }
      }
    }

    const mutationOb = new MutationObserver(fn)
    mutationOb.observe(dom, { attributes: true })
    fn()
  }

  function toggleFullScreen(bool) {
    
  }

  function inject() {
    let dom = document.querySelector('.fullscn')
    dom.onclick = () => {
      if (document.body.style.overflow === 'hidden') {
        document.body.style.overflow = ''
      } else {
        document.body.style.overflow = 'hidden'
      }
    }

    let ageframediv = document.getElementById('ageframediv')
    let { width, height } = ageframediv.getBoundingClientRect()
    ageframediv.style.height = (width / 16) * 9 + 'px'
  }

  if (parent === self) {
    // inject window message listener
    window.addEventListener('message', (e) => {
      if (e.data && e.data.code === 233) {
        gotoNextPart()
      }

      if (e.data && e.data.code === 666) {
        let dom = document.querySelector('.fullscn')
        dom.click()
      }
    })

    // log page to history
    if (location.pathname.startsWith('/play')) {
      inject()
      replacePlayer()
      saveToHistory()
    }

    // in detail pages show view history
    if (location.pathname.startsWith('/detail')) {
      renderHistory()
    }
  }
})()

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址