// ==UserScript== // @name Yande.re 大图预览 显示艺术家 打开原图 // @version 1.6 // @description Yande.re浏览增强:悬停大图预览,显示艺术家名称,点击跳转主页,右键名称可标记艺术家显示不同颜色,支持双击/键盘翻页,自动显示隐藏图片,替换分辨率标签直接打开原图按钮,显示上传时间 // @description 原脚本已数年未更新,在原作者Joker(Streams)的基础上修改; konachan有限支持,部分功能可能无法使用 // @author Cylirix // @author Joker // @author Streams // @match https://yande.re/* // @icon https://yande.re/favicon.ico // @grant GM_getValue // @grant GM_setValue // @grant GM_registerMenuCommand // @namespace https://greasyfork.org/users/467741 // @downloadURL https://update.greasyfork.icu/scripts/545994/Yandere%20%E5%A4%A7%E5%9B%BE%E9%A2%84%E8%A7%88%20%E6%98%BE%E7%A4%BA%E8%89%BA%E6%9C%AF%E5%AE%B6%20%E6%89%93%E5%BC%80%E5%8E%9F%E5%9B%BE.user.js // @updateURL https://update.greasyfork.icu/scripts/545994/Yandere%20%E5%A4%A7%E5%9B%BE%E9%A2%84%E8%A7%88%20%E6%98%BE%E7%A4%BA%E8%89%BA%E6%9C%AF%E5%AE%B6%20%E6%89%93%E5%BC%80%E5%8E%9F%E5%9B%BE.meta.js // ==/UserScript== //const ENABLE_PREVIEW_DEBUG = false; const ENABLE_PREVIEW_DEBUG = true; jQuery.noConflict(); jQuery(function ($) { // 全局唯一标识系统 var currentUUID = null; var requestController = null; var hoverTimer = null; var currentHoverItem = null; const CACHE_DAYS = 365; // ←←← 这里改缓存时间(天数),7=一周,14=两周,30=一个月 // 搜索 限制缓存数量 可修改,默认5000条 // 添加时间显示设置 var showUploadTime = true; // 默认显示 var artistStates = {}; // 用于存储当前页面 script 标签中直接包含的数据 var pageData = { posts: {}, tagTypes: {} }; function parsePageScriptData() { $('script:not([src])').each(function() { var content = $(this).html(); if (!content) return; // --- 情况 A: 列表页 Post.register({...}) --- var postRegex = /Post\.register\(\s*(\{.*?\})\s*\)/g; var match; while ((match = postRegex.exec(content)) !== null) { try { var postObj = JSON.parse(match[1]); if (postObj && postObj.id) pageData.posts[postObj.id] = postObj; } catch (e) {} } // --- 情况 B: Pool页/图集页 Post.register_resp({...}) --- // 匹配 Post.register_resp({ ... }); var respMatch = content.match(/Post\.register_resp\(\s*(\{.*?\})\s*\);/); if (respMatch && respMatch[1]) { try { var respData = JSON.parse(respMatch[1]); // 1. 提取标签字典 if (respData.tags) { Object.assign(pageData.tagTypes, respData.tags); } // 2. 提取帖子数组 if (respData.posts && Array.isArray(respData.posts)) { respData.posts.forEach(function(post) { pageData.posts[post.id] = post; }); } } catch (e) { console.error("Pool页数据解析失败:", e); } } // --- 提取 Post.register_tags (补充) --- var tagsMatch = content.match(/Post\.register_tags\(\s*(\{.*?\})\s*\);/); if (tagsMatch && tagsMatch[1]) { try { Object.assign(pageData.tagTypes, JSON.parse(tagsMatch[1])); } catch (e) {} } }); if (ENABLE_PREVIEW_DEBUG) { console.log(`[Page Data] 解析完成: ${Object.keys(pageData.posts).length} 帖子`); } } // 立即运行解析 parsePageScriptData(); // 从Tampermonkey存储加载数据 try { const savedStates = GM_getValue("artistStates", "{}"); artistStates = JSON.parse(savedStates); // 加载时间显示设置,默认true showUploadTime = GM_getValue("showUploadTime", true); } catch (e) { console.error("Error loading artist states:", e); } // 右键菜单容器 const $contextMenu = $('