jav.guru: Add MissAV link next to Code

Find "Code:" in <li> elements and add a MissAV search link next to the code

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         jav.guru: Add MissAV link next to Code
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Find "Code:" in <li> elements and add a MissAV search link next to the code
// @match        https://jav.guru/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=jav.guru
// @grant        none
// @run-at       document-end
// @license      Public Domain
// ==/UserScript==

(function () {
    'use strict';

    // Extract the code from text like "Code: ***-***"
    function extractCode(text) {
        const m = text.match(/Code:\s*([A-Za-z0-9-]+)/);
        return m ? m[1] : null;
    }

    // Add the MissAV link if not already added
    function addLink(li) {
        const text = li.textContent || '';
        const code = extractCode(text);
        if (!code) return false;

        // Avoid duplicates
        if (li.querySelector('.missav-link')) return true;

        const link = document.createElement('a');
        link.href = `https://missav.ws/en/search/${encodeURIComponent(code)}`;
        link.textContent = 'MissAV';
        link.target = '_blank';
        link.rel = 'nofollow noopener';
        link.className = 'missav-link';
        link.style.marginLeft = '8px';
        link.style.color = '#1e90ff';
        link.style.textDecoration = 'none';

        // Insert link after the code text
        li.appendChild(link);
        console.log(`[MissAV Link] Added for code: ${code}`);
        return true;
    }

    // Try to find and add links to any matching elements
    function processAll() {
        let added = false;
        document.querySelectorAll('li').forEach(li => {
            if (addLink(li)) added = true;
        });
        return added;
    }

    // Observe for dynamically added content
    function initObserver() {
        if (processAll()) return; // maybe already added

        const observer = new MutationObserver((mutations, obs) => {
            if (processAll()) {
                // stop if you only want to add once
                // obs.disconnect();
            }
        });

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

    // Run
    initObserver();
})();