Greasy Fork

Greasy Fork is available in English.

增強漫畫櫃

漫畫櫃自動隐藏頂部元素、中鍵捲動頁面、圖片高寬調整、自動切換上下一章、更改cookie

当前为 2025-03-04 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name 增強漫畫櫃
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 漫畫櫃自動隐藏頂部元素、中鍵捲動頁面、圖片高寬調整、自動切換上下一章、更改cookie
// @license MIT
// @match *://www.manhuagui.com/*
// @run-at       document-end
// @grant none
// ==/UserScript==

//-----------------------------------------------------------------------------------------------------------
//禁用tbBox.live
(function($) {
    'use strict';
    function disableTbBoxLive() {
        if ($('#tbBox').off) {
            $('#tbBox').off();
        }
        if ($('#tbBox').die) {
            $('#tbBox').die();
        }
    }

    // 確保在 DOM 準備好後執行
    $(document).ready(function() {
        disableTbBoxLive();
    });

    // 監控 DOM 變化,持續禁用 #tbBox.live
    const observer = new MutationObserver(() => {
        if ($('#tbBox').length) {
            disableTbBoxLive();
        }
    });

    observer.observe(document.body, { childList: true, subtree: true });
})(window.jQuery);

(function() {
    'use strict';
  //-----------------------------------------------------------------------------------------------------------
//滑鼠中鍵捲動頁面(上下和左右)
    let isMiddleButtonPressed = false;
    let lastX = 0;
    let lastY = 0;

    // 監聽滑鼠中鍵按下事件
    document.addEventListener('mousedown', function(e) {
        if (e.button === 1) { // 判斷是否是中鍵(button 1)
            isMiddleButtonPressed = true;
            document.body.style.cursor = 'grab';
            lastX = e.clientX; // 記錄初始的X座標
            lastY = e.clientY; // 記錄初始的Y座標
            e.preventDefault(); // 防止預設行為(如點擊選擇文本等)
        }
    });

    // 監聽滑鼠中鍵釋放事件
    document.addEventListener('mouseup', function(e) {
        if (e.button === 1) { // 中鍵釋放
            isMiddleButtonPressed = false;
            document.body.style.cursor = 'default';
        }
    });

    // 監聽滑鼠移動事件
    document.addEventListener('mousemove', function(e) {
        if (isMiddleButtonPressed) {
            let deltaX = e.clientX - lastX; // 計算滑鼠水平移動的距離
            let deltaY = e.clientY - lastY; // 計算滑鼠垂直移動的距離
            window.scrollBy(-deltaX*2, -deltaY*4); // 依照滑鼠移動量來捲動頁面(上下和左右)
            lastX = e.clientX; // 更新滑鼠的最後X座標
            lastY = e.clientY; // 更新滑鼠的最後Y座標
        }
    });
//-----------------------------------------------------------------------------------------------------------
//隱藏元素
const url = window.location.href;
if (url.includes('html')&&url.includes('/comic/')) {
  // 获取要隐藏的元素
  var header = document.querySelector('.header'); // 修改为你要隐藏的元素的ID或选择器
  var headerheight = '50px';
  var headerinner = document.querySelector('.header-inner');
  var title = document.querySelector('.title');
  var w980tc = document.querySelector('.main-btn');
  var w980sub = document.querySelector('.w980.clearfix.sub-btn');

  if (header) {
    // 隐藏元素
    header.style.position = 'absolute';
    header.style.top = '0px';
    header.style.left = '0px';
    header.style.width = '100%';
    header.style.height = headerheight;
    header.style.backgroundColor = 'transparent';
    header.style.borderBottom = '0px';
    header.style.zIndex = '1';
    headerinner.style.display = 'none';
    title.style.display = 'none';
    w980tc.style.display = 'none';
    w980sub.style.display = 'none';
//    header.style.height = '10px';
    header.style.display = 'block';
    header.style.marginBottom = '0px';
    w980sub.style.margin = '0px auto';

    // 为元素添加hover事件
    header.addEventListener('mouseover', function() {
      header.style.position = 'relative';
      header.style.backgroundColor = '#1e8ad6';
      header.style.borderBottom = '2px solid #114f7b';
      headerinner.style.display = 'block';
      title.style.display = 'block';
      w980tc.style.display = 'block';
      w980sub.style.display = 'block';
      header.style.height = '34px';
    });

    header.addEventListener('mouseout', function() {
      header.style.position = 'absolute';
      header.style.backgroundColor = 'transparent';
      header.style.borderBottom = '0px';
      headerinner.style.display = 'none';
      title.style.display = 'none';
      w980tc.style.display = 'none';
      w980sub.style.display = 'none';
      header.style.height = headerheight;
    });
    title.addEventListener('mouseover', function() {
      header.style.position = 'relative';
      header.style.backgroundColor = '#1e8ad6';
      header.style.borderBottom = '2px solid #114f7b';
      headerinner.style.display = 'block';
      title.style.display = 'block';
      w980tc.style.display = 'block';
      w980sub.style.display = 'block';
      header.style.height = '34px';
    });

    title.addEventListener('mouseout', function() {
      header.style.position = 'absolute';
      header.style.backgroundColor = 'transparent';
      header.style.borderBottom = '0px';
      headerinner.style.display = 'none';
      title.style.display = 'none';
      w980tc.style.display = 'none';
      w980sub.style.display = 'none';
      header.style.height = headerheight;
    });
    w980tc.addEventListener('mouseover', function() {
      header.style.position = 'relative';
      header.style.backgroundColor = '#1e8ad6';
      header.style.borderBottom = '2px solid #114f7b';
      headerinner.style.display = 'block';
      title.style.display = 'block';
      w980tc.style.display = 'block';
      w980sub.style.display = 'block';
      header.style.height = '34px';
    });

    w980tc.addEventListener('mouseout', function() {
      header.style.position = 'absolute';
      header.style.backgroundColor = 'transparent';
      header.style.borderBottom = '0px';
      headerinner.style.display = 'none';
      title.style.display = 'none';
      w980tc.style.display = 'none';
      w980sub.style.display = 'none';
      header.style.height = headerheight;
    });
    w980sub.addEventListener('mouseover', function() {
      header.style.position = 'relative';
      header.style.backgroundColor = '#1e8ad6';
      header.style.borderBottom = '2px solid #114f7b';
      headerinner.style.display = 'block';
      title.style.display = 'block';
      w980tc.style.display = 'block';
      w980sub.style.display = 'block';
      header.style.height = '34px';
    });

    w980sub.addEventListener('mouseout', function() {
      header.style.position = 'absolute';
      header.style.backgroundColor = 'transparent';
      header.style.borderBottom = '0px';
      headerinner.style.display = 'none';
      title.style.display = 'none';
      w980tc.style.display = 'none';
      w980sub.style.display = 'none';
      header.style.height = headerheight;
    });
  }
//-----------------------------------------------------------------------------------------------------------
//改變css style
    const style = document.createElement('style');
    style.textContent = `
        .notice-bar .notice{
            width:initial;
            float: initial;
        }
        .w998, .w728, .w980, .chapter, .chapter-list, .latest-list, .latest-list ul, .contList, .book-list ul, .cmt-cont, .cover-list, .tbCenter, #mangabox {
            width:100%;
        }
        .w860 {
            float:left;
        }
        .tbCenter {
            border:0px;
            background-color: transparent;
        }
        .footer-cont {
            width:100%;
            padding: 0;
        }
        .sub-btn {
            width:980px;
        }
    `;
    document.head.appendChild(style);
    function resizeImage() {
        const windowHeight = window.innerHeight;
        const windowWidth = window.innerWidth;

        const img = document.getElementById('mangaFile');
        if (img && img.complete) {
            const style = document.getElementById('mangaFile-resize-style') || document.createElement('style');
            style.id = 'mangaFile-resize-style';
            if (!document.head.contains(style)) {
                document.head.appendChild(style);
            }

            const adjustedWidth = (windowHeight / img.naturalHeight) * img.naturalWidth;

            if (img.naturalHeight > img.naturalWidth && windowHeight > 1.5*windowWidth) {
                // 圖片高度大於圖片寬度,且圖片寬度超過視窗寬度,將圖片寬度設為視窗寬度
                style.innerHTML = `#mangaFile { width: ${windowWidth}px; height: auto; }`;
            } else if (img.naturalHeight > windowHeight && adjustedWidth > windowWidth) {
                // 高度大於視窗高度且調整過圖片寬度大於視窗寬度,將圖片高度設為視窗高度且header, .main-nav .main-bar為調整過寬度
                style.innerHTML = `#mangaFile { height: ${windowHeight}px; width: auto; } body {width: ${adjustedWidth}px;}`;
                //header.style.width = `${adjustedWidth}px`;
            } else if (img.naturalHeight > windowHeight) {
                // 圖片高度大於視窗高度,將圖片高度設為視窗高度
                style.innerHTML = `#mangaFile { height: ${windowHeight}px; width: auto; } body {width: 100%;}`;
            } else if (img.naturalWidth > windowWidth) {
                // 圖片寬度度大於視窗寬度,將header, .main-nav .main-bar為圖片寬度
                style.innerHTML = `#mangaFile { height: auto; width: auto; } body {width: ${img.naturalWidth}px;}`;
                header.style.width = `${img.naturalWidth}px`;
            } else {
                // 其他情況,auto
                style.innerHTML = `#mangaFile { height: auto; width: auto; }`;
            }

        }
    }

    function observeImage() {
        const img = document.getElementById('mangaFile');
        if (img) {
            img.addEventListener('load', resizeImage);
            if (img.complete) {
                resizeImage();
            }
        }
    }

    const observer = new MutationObserver(() => {
        observeImage();
    });

    observer.observe(document.body, { childList: true, subtree: true });

    window.addEventListener('load', observeImage);
//-----------------------------------------------------------------------------------------------------------
//Auto Scroll to Right on Large Images
    function scrollToRightIfNeeded() {
        const viewportWidth = window.innerWidth;
        const images = document.querySelectorAll('img');

        for (const img of images) {
            if (img.complete && img.offsetWidth > viewportWidth) {
                setTimeout(() => {
                    window.scrollTo({ left: document.documentElement.scrollWidth, behavior: 'auto' });
                }, 50); // Reduced delay and faster scroll behavior
                break; // Only scroll once for the first oversized image
            }
        }
    }

    // Run on page load
    window.addEventListener('load', scrollToRightIfNeeded);

    // Optional: observe new images added dynamically
    const scrollobserver = new MutationObserver(scrollToRightIfNeeded);
    scrollobserver.observe(document.body, { childList: true, subtree: true });
//-----------------------------------------------------------------------------------------------------------
//自動上下一章
        const pbokobserver = new MutationObserver((mutations) => {
        const okButton = document.querySelector('.pb-ok'); // Assuming this is the class for the confirm button
        if (okButton) {
            console.log('Confirm button found, triggering onOk function...');
            okButton.click(); // Simulate the button click which should call onOk

            // If you want to directly call the function without button click:
            // if (typeof r === 'function') r(1); // Replace '1' if needed

            pbokobserver.disconnect(); // Stop observing once the button is found and action taken
        }
    });

    pbokobserver.observe(document.body, { childList: true, subtree: true });
//-----------------------------------------------------------------------------------------------------------
//修改cookie為CN
    const targetCookieName = 'country';
    const newValue = 'CN';
    const domain = '.manhuagui.com'; // 注意:跨子域需要加前缀点,如 .example.com
    const path = '/'; // 可选,Cookie作用路径
    const days = 7; // Cookie有效期(天)

    // 设置Cookie,支持domain
    function setCookie(name, value, days, domain, path = '/') {
        const expires = new Date();
        expires.setTime(expires.getTime() + (days * 24 * 60 * 60 * 1000));
        document.cookie = `${name}=${value};expires=${expires.toUTCString()};path=${path};domain=${domain};`;
        console.log(`Cookie ${name} 已修改为 ${value}, domain: ${domain}`);
    }

    // 读取当前Cookie
    function getCookie(name) {
        const cookies = document.cookie.split(';');
        for (let cookie of cookies) {
            const [key, value] = cookie.trim().split('=');
            if (key === name) return value;
        }
        return null;
    }

    // 检查并修改Cookie
    const currentValue = getCookie(targetCookieName);
    if (currentValue !== newValue) {
        setCookie(targetCookieName, newValue, days, domain, path);
    } else {
        console.log(`Cookie ${targetCookieName} 已是最新值,无需修改`);
    }
} else {
        document.querySelectorAll('a[target]').forEach(link => {
        link.setAttribute('target', '_self');
    });
}})();