您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replaces the Home button with a Random button that navigates to random comics
- // ==UserScript==
- // @name Comick.io Random Comic Button
- // @namespace https://github.com/GooglyBlox
- // @version 1.0
- // @description Replaces the Home button with a Random button that navigates to random comics
- // @author GooglyBlox
- // @match https://comick.io/*
- // @grant GM_xmlhttpRequest
- // @connect api.comick.io
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- let comics = [];
- let isLoading = false;
- function loadComics() {
- if (isLoading) return;
- isLoading = true;
- loadPage(1);
- }
- function loadPage(page, maxPages = 50) {
- GM_xmlhttpRequest({
- method: "GET",
- url: `https://api.comick.io/v1.0/search?limit=50&page=${page}`,
- onload: function(response) {
- try {
- const data = JSON.parse(response.responseText);
- if (data && Array.isArray(data)) {
- comics = comics.concat(data);
- if (data.length > 0 && page < maxPages) {
- loadPage(page + 1, maxPages);
- } else {
- isLoading = false;
- console.log(`Loaded ${comics.length} comics for random selection`);
- }
- }
- } catch (error) {
- console.error("Error loading comics:", error);
- isLoading = false;
- }
- },
- onerror: function(error) {
- console.error("Error loading comics:", error);
- isLoading = false;
- }
- });
- }
- function updateButton() {
- const homeLink = document.querySelector('a[href="/home2"].relative.grow-0.w-9\\/12.flex.justify-center.h-28, a[href="/home2"].relative.grow-0.flex.justify-center');
- if (!homeLink) return false;
- if (homeLink.getAttribute('data-random-button-modified')) return true;
- homeLink.setAttribute('data-random-button-modified', 'true');
- const buttonDiv = homeLink.querySelector('button div');
- if (buttonDiv) {
- buttonDiv.innerHTML = `
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-dices-icon lucide-dices w-5 h-5 md:w-6 md:h-6 lg:w-7 lg:h-7">
- <rect width="12" height="12" x="2" y="10" rx="2" ry="2"/>
- <path d="m17.92 14 3.5-3.5a2.24 2.24 0 0 0 0-3l-5-4.92a2.24 2.24 0 0 0-3 0L10 6"/>
- <path d="M6 18h.01"/>
- <path d="M10 14h.01"/>
- <path d="M15 6h.01"/>
- <path d="M18 9h.01"/>
- </svg>
- <div class="text-xs absolute left-1/2 -translate-x-1/2">Random</div>
- `;
- }
- const newHomeLink = homeLink.cloneNode(true);
- homeLink.parentNode.replaceChild(newHomeLink, homeLink);
- newHomeLink.setAttribute('href', '#');
- newHomeLink.setAttribute('data-random-button-modified', 'true');
- newHomeLink.addEventListener('click', function(e) {
- e.preventDefault();
- e.stopPropagation();
- if (comics.length === 0) {
- alert("Still loading comics. Please try again in a moment.");
- return;
- }
- const randomComic = comics[Math.floor(Math.random() * comics.length)];
- if (randomComic && randomComic.slug) {
- window.location.href = `https://comick.io/comic/${randomComic.slug}`;
- }
- });
- return true;
- }
- function checkForButton() {
- if (updateButton()) {
- setTimeout(checkForButton, 1000);
- return;
- }
- setTimeout(checkForButton, 300);
- }
- loadComics();
- checkForButton();
- const observer = new MutationObserver(function(mutations) {
- for (let i = 0; i < mutations.length; i++) {
- const mutation = mutations[i];
- if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
- if (mutation.target.tagName === 'NAV' ||
- mutation.target.closest('nav') ||
- mutation.target.closest('.sidebar')) {
- updateButton();
- break;
- }
- }
- }
- });
- const navElements = document.querySelectorAll('nav, .sidebar, header');
- if (navElements.length > 0) {
- navElements.forEach(el => observer.observe(el, { childList: true, subtree: true }));
- } else {
- observer.observe(document.body, { childList: true, subtree: true });
- }
- })();