Furaffinity Webcomic Autoloader 2.0

Gives you the option to load all the subsequent comic pages on a FurAffinity comic page automatically. Now with the option to show or hide Page Links.

目前为 2023-01-06 提交的版本。查看 最新版本

// ==UserScript==
// @name     			Furaffinity Webcomic Autoloader 2.0
// @version  			0.2.4
// @description  	Gives you the option to load all the subsequent comic pages on a FurAffinity comic page automatically. Now with the option to show or hide Page Links.
// @grant    			none
// @icon          https://www.furaffinity.net/themes/beta/img/banners/fa_logo.png?v2
// @author   			Midori Dragon
// @match    			*://*.furaffinity.net/view/*
// @namespace     Violentmonkey Scripts
// @license       MIT
// ==/UserScript==

var rootHolder = document.getElementById("submissionImg");
var counter = 5;
var showLinks = false;
var prevImg;
var startImg = window.location.href;

function insertAfter(newElement, referenceElement) {
  referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);
}
function insertBreakAfter(referenceElement) {
  var br = document.createElement("br");
  insertAfter(br, referenceElement);
}

function getNextLink(doc) {
  //console.log("Get Next Link");
  var comicDoc = doc.getElementsByClassName("submission-description user-submitted-links")[0].childNodes;
  if(comicDoc.length < 5) {
    if(doc.getElementsByClassName("parsed_nav_links")[0].childNodes.length < 5) {
      //console.log("No Comic Tag");
      return null;
    } else
      comicDoc = doc.getElementsByClassName("parsed_nav_links")[0].childNodes;
  } else {
    if(doc.getElementsByClassName("parsed_nav_links")[0].childNodes.length >= 5)
      comicDoc = doc.getElementsByClassName("parsed_nav_links")[0].childNodes;
  }
  //console.log("Is Comic: " + comicDoc);
  var link;
  comicDoc.forEach(function(elem) {
    //console.log("elem: " + elem.textContent);
    if (elem.textContent.toLowerCase().includes("next")) {
      var currImgCalc = elem.href.substring(elem.href.lastIndexOf('/'), elem.href.length);
      var startImgCalc = startImg.substring(0, startImg.length-1);
      startImgCalc = startImgCalc.substring(startImgCalc.lastIndexOf('/'), startImgCalc.length);
      if (currImgCalc != startImgCalc && elem.href != prevImg) {
        link = elem.href;
        prevImg = link;
      }
      //console.log("found: " + elem.textContent + " Link = " + elem.href);
      return;
    }
  });
  return link;
}

function loadNextPage(nextLink) {

  if(nextLink) {
    var request = new XMLHttpRequest();
    request.open('GET', nextLink, true);

    request.onload = function() {
      if (this.status >= 200 && this.status < 400) {
        // Success!
        //var data = JSON.parse(this.response);
        parser = new DOMParser();
        var nextPage = parser.parseFromString(this.response, "text/html");
        //console.log(this.response)
        var nl = getNextLink(nextPage);
        var img = nextPage.getElementById("submissionImg");

        rootHolder.parentNode.insertBefore(img, rootHolder.nextSibling);
        rootHolder = rootHolder.nextSibling;

        insertBreakAfter(rootHolder);
        rootHolder = rootHolder.nextSibling;
        if (showLinks) {
          var lnk = document.createElement('a');
          var lnkURL = nextLink;
          lnk.innerHTML = lnkURL;
          lnk.href = lnkURL;
          insertAfter(lnk, rootHolder);
        }
        rootHolder = rootHolder.nextSibling;

        insertBreakAfter(rootHolder);
        rootHolder = rootHolder.nextSibling;

        loadNextPage(nl);
      } else {
        //We reached our target server, but it returned an error
        console.log("none");
      }
    };

    request.onerror = function() {
      //There was a connection error of some sort
          console.log("error");
    };

    request.send();
  }
}
function startAutoloader() {
	//console.log("starting...");
  var ab = document.getElementById("autoloaderButton");
  ab.parentNode.removeChild(ab);
  var checkbox = document.getElementById("linksCheckbox");
  checkbox.parentNode.removeChild(checkbox);
  var label = document.getElementById("showLinksLabel");
  label.parentNode.removeChild(label);
  loadNextPage(secondPage);
}

function setShowLinks() {
  if (showLinks)
    showLinks = false;
  else
    showLinks = true;
  var checkbox = document.getElementById("linksCheckbox");
  checkbox.checked = showLinks;
}

var secondPage = getNextLink(document);
console.log("Link = " + secondPage);
if(secondPage) {
  var img = document.getElementById("submissionImg");
  console.log("Image found");
  insertBreakAfter(rootHolder);
  rootHolder = rootHolder.nextSibling;

  var label = document.createElement('a');
  label.id = "showLinksLabel";
  label.innerHTML = "Show Links";
  label.style.cursor = "pointer";
  label.style.marginBottom = "30px";
  label.style.marginLeft = "5px";
  label.onclick = setShowLinks;
  insertAfter(label, rootHolder);

  var checkbox = document.createElement('input');
  checkbox.value = "Show Links";
  checkbox.type = "checkbox";
  checkbox.id = "linksCheckbox";
  checkbox.className = "checkbox standard mobile-fix";
  checkbox.style.cursor = "pointer";
  checkbox.style.marginBottom = "30px";
  checkbox.style.marginLeft = "20px";
  checkbox.onclick = setShowLinks;
  insertAfter(checkbox, rootHolder);

  var button = document.createElement('input');
  button.value = "Enable Comic Autoloader";
  button.type = "button";
  button.id = "autoloaderButton";
  button.className = "button standard mobile-fix";
  button.style.marginTop = "10px";
  button.style.marginBottom = "20px";
  button.onclick = startAutoloader;
  insertAfter(button, rootHolder);
}

QingJ © 2025

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