您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enhance hpjav.tv
// ==UserScript== // @name HPJAV Enhance // @namespace https://github.com/isTianXin/GMScript/ // @version 1.1 // @description Enhance hpjav.tv // @author sancunguangyin // @match *://hpjav.tv/hot // @match *://hpjav.tv/category/* // @grant GM_openInTab // @grant GM_info // @run-at document-end // ==/UserScript== 'use strict'; const OPEN_ALL_TORRENT_LINKS_BUTTON = "openAllLinks"; const SCRIPT_HANDLER_TAMPERMONKEY = 'tampermonkey'; let isTampermonkey = () => { return (GM_info || { scriptHandler: '' }).scriptHandler.toLowerCase() === SCRIPT_HANDLER_TAMPERMONKEY; } let getAdaptivedDocument = () => { //Tampermonkey will get first iframe, may be a bug if (isTampermonkey()) { return window.parent.document; } return window.document; } let adaptivedDocument = getAdaptivedDocument(); let getTorrentFunkLink = (key) => { return `https://www.torrentfunk.com/all/torrents/${key}.html`; } let parseVideoName = (text) => { if (!text) { return null; } let names = text.split(" "); if (!names || !names[0]) { return null; } if (!names[1]) { return names[0]; } let first = names[0]; // like ipz-127 300mium-665 if (/\w+-\d+/.test(first)) { return first; } let second = names[1]; // like ipz, s-cute, 300miun if (/^\w+(-([A-Za-z])+)?$/.test(first)) { return first + '-' + second; } return first; }; let replaceDateTextWithTorrentFunkLink = (card) => { if (!card) { return; } let name = parseVideoName(card.querySelector("a").innerText); if (!name) { return; } let torrentFunkLink = getTorrentFunkLink(name); let date = card.lastChild.wholeText; card.lastChild.remove(); let jumpLink = `<a href=${torrentFunkLink} class="torrent-link" target="_blank">${date}</a>`; card.insertAdjacentHTML("beforeend", jumpLink); } let insertTorrentFunkLink = () => { let cards = Array.from(adaptivedDocument.querySelectorAll("div > div.entry-title")); if (!cards) { return; } cards.forEach(replaceDateTextWithTorrentFunkLink); } let openAllTorrentFunkLinks = () => { Array.from(adaptivedDocument.querySelectorAll("a.torrent-link")) .map(item => item.href) .forEach( item => { if (!item) { return; } setTimeout(() => { GM_openInTab(item, { insert: false }); }, 50); } ); } let insertOpenAllButton = () => { let buttons = adaptivedDocument.querySelector("div.category-count > span"); let btn = `<a class="btn btn-sm btn-default" id="${OPEN_ALL_TORRENT_LINKS_BUTTON}" rel="nofollow">Open All Torrent Links</a>`; buttons.insertAdjacentHTML("afterbegin", btn); } let start = () => { insertTorrentFunkLink(); insertOpenAllButton(); } /** * @param {integer} interval */ let startWithInterval = (interval) => { window.setTimeout(start, interval); } startWithInterval(1000); adaptivedDocument.onclick = e => { //openAll onclick if (e.target.id === OPEN_ALL_TORRENT_LINKS_BUTTON) { let clicked = false; if (!clicked) { openAllTorrentFunkLinks(); clicked = true; } setTimeout(() => clicked = false, 1000); } };