您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
它可以让您在作品页面底部的推荐作品中只显示R-18作品。
当前为
/*jshint esversion: 6 */ // ==UserScript== // @name Script to switch recommended works on pixiv to show only R-18 works // @name:ja pixivの関連作品をR-18オンリーと切り替えるスクリプト // @name:zh-CN 将pixiv上的推荐作品切换为只显示R-18的Script // @description allows you to display only R-18 works in the recommended works at the bottom of the artwork page. // @description:ja pixivの作品画面の下部に表示される関連作品を、R-18作品に絞って表示することができます。 // @description:zh-cn 它可以让您在作品页面底部的推荐作品中只显示R-18作品。 // @version 0.5.2 // @author Qappendix // @license GPL v3; https://www.gnu.org/copyleft/gpl.html // @match *://www.pixiv.net/* // @grant GM_setValue // @grant GM_getValue // @namespace https://greasyfork.org/users/724570 // ==/UserScript== (function() { //変数初期化 let recommendSection = null; let href = location.href; let artworkUrl = /^(http|https):\/\/(www)?\.pixiv\.net\/artworks\/.*/; let isEnabled = GM_getValue('isEnabled', true); let allIllustsSet = new Set(); let sensitiveIllustsSet = new Set(); let notSensitiveIllustsSet = new Set(); ///ボタン要素追加 let switchButton = document.createElement('button'); let switchButtonStyle = 'position: fixed; bottom: 10px; right: 10px; padding: 6px 40px;'; let ONText = 'R-18 only: ON'; let OFFText = 'R-18 only: OFF'; isEnabled ? switchButton.innerHTML = ONText : switchButton.innerHTML = OFFText; switchButton.id = 'switch_button'; switchButton.setAttribute('Style', switchButtonStyle) document.body.appendChild(switchButton); //ボタンクリック時イベント定義 switchButton.addEventListener('click', function(){ if(isEnabled){ isEnabled = false; switchButton.innerHTML = OFFText; toggleDisplayIllusts(); }else{ isEnabled = true; switchButton.innerHTML = ONText; enableObservation(); toggleDisplayIllusts(); } GM_setValue('isEnabled',isEnabled); }); ///MutationObserver定義 //ページ遷移検出、初期化 let documentObserver = new MutationObserver( function(){ if(href !== location.href){ href = location.href; recommendSection = null; recommendObserver.disconnect(); allIllustsSet.clear(); sensitiveIllustsSet.clear(); return; } if(artworkUrl.test(href)){ enableObservation(); } }) let recommendObserver = new MutationObserver( function(){ updateRecommendSection(); }) //文書全体の変更を監視 documentObserver.observe(document, {attributes: true, subtree: true}); ///関数定義 function enableObservation(){ if(!isEnabled || !artworkUrl.test(href)){ return; } if(!recommendSection){ updateRecommendSection(); } if(recommendSection){ recommendObserver.observe(recommendSection, {attributes: true, subtree: true}); } } function updateRecommendSection(){ if(!recommendSection){ for(let section of document.body.getElementsByTagName("section")){ for(let div of section.getElementsByTagName("div")){ if(div.textContent == "関連作品" || div.textContent == "おすすめ作品"){ recommendSection = section; } } } } updateIllustsSet(recommendSection); toggleDisplayIllusts(); } function updateIllustsSet(recom){ if(!recom){ console.log("recom doesn't exist"); return;} Array.prototype.forEach.call(recom.getElementsByTagName("li"), function(li){ allIllustsSet.add(li); if(li.textContent.indexOf("R-18")!=-1){ sensitiveIllustsSet.add(li); } }) for(let work of allIllustsSet){ if(!sensitiveIllustsSet.has(work)){ notSensitiveIllustsSet.add(work); } } } function toggleDisplayIllusts(){ if(sensitiveIllustsSet.size!=0){ switch(isEnabled){ case true: for(let work of notSensitiveIllustsSet){ work.style.display="none"; } break; case false: for(let work of notSensitiveIllustsSet){ work.style.display="block"; } break; } } } })()