您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在 NeoDB 书籍页面添加安娜档案搜索结果
// ==UserScript== // @name NeoDB 安娜档案搜索 // @name:en annas archive for NeoDB // @namespace http://tampermonkey.net/ // @version 0.1.1 // @description 在 NeoDB 书籍页面添加安娜档案搜索结果 // @description:en dispaly annas archive search result on NeoDB // @author lozhang // @match https://neodb.social/book/* // @grant GM_xmlhttpRequest // @connect zh.annas-archive.org // @license MIT // ==/UserScript== (function() { 'use strict'; // 主函数 function main() { // 检查是否在书籍页面 if (!window.location.href.match(/https:\/\/neodb\.social\/book\/[a-zA-Z0-9]+/)) { console.log('检查是否在书籍页面'); return; } // 获取书籍标题 const bookTitle = getBookTitle(); if (!bookTitle) { console.error('无法获取书籍标题'); return; } //console.log('title', bookTitle); // 搜索安娜档案 searchAnnasArchive(bookTitle); } // 获取书籍标题 function getBookTitle() { // 尝试从页面标题中获取 const titleElement = document.querySelector('h1.item-title'); if (titleElement) { return titleElement.textContent.trim(); } // 备选方案:从 meta 标签获取 const metaTitle = document.querySelector('meta[property="og:title"]'); if (metaTitle) { let title = metaTitle.getAttribute('content'); // 移除可能的前缀,如 "图书 - " title = title.replace(/^图书\s*-\s*/, ''); return title.trim(); } return null; } // 在安娜档案搜索 function searchAnnasArchive(bookTitle) { const searchUrl = `https://zh.annas-archive.org/search?q=${encodeURIComponent(bookTitle)}`; GM_xmlhttpRequest({ method: 'GET', url: searchUrl, onload: function(response) { if (response.status === 200) { const parser = new DOMParser(); const doc = parser.parseFromString(response.responseText, 'text/html'); // 提取搜索结果 const results = extractSearchResults(doc); console.log("results", results, doc); // 在页面上显示结果 displayResults(results, searchUrl); } else { console.error('安娜档案搜索失败:', response.statusText); } }, onerror: function(error) { console.error('请求安娜档案时出错:', error); } }); } // 从安娜档案页面提取搜索结果 function extractSearchResults(doc) { const results = []; const resultElements = doc.querySelector('#aarecord-list').querySelectorAll('div'); resultElements.forEach(element => { const titleElement = element.querySelector('h3'); if (!titleElement) return; const linkElement = element.querySelector('a[href^="/md5/"]'); if (!linkElement) return; const formatElement = element.querySelector('.text-xs'); const authorElement = element.querySelector('.italic'); const result = { title: titleElement.textContent.trim(), link: 'https://zh.annas-archive.org' + linkElement.getAttribute('href'), format: formatElement ? formatElement.textContent.trim() : '未知格式', author: authorElement ? authorElement.textContent.trim() : '未知作者' }; results.push(result); }); return results; } // 在页面上显示结果 function displayResults(results, searchUrl) { // 创建结果容器 const container = document.createElement('div'); container.className = 'annas-archive-results'; container.style.margin = '20px 0'; container.style.padding = '15px'; container.style.border = '1px solid #ddd'; container.style.borderRadius = '5px'; container.style.backgroundColor = '#f9f9f9'; // 添加标题 const title = document.createElement('h3'); title.textContent = '安娜档案搜索结果'; title.style.marginBottom = '15px'; container.appendChild(title); // 添加搜索链接 const searchLink = document.createElement('a'); searchLink.href = searchUrl; searchLink.textContent = '在安娜档案中查看完整搜索结果'; searchLink.target = '_blank'; searchLink.style.display = 'inline-block'; searchLink.style.marginBottom = '15px'; container.appendChild(searchLink); // 如果没有结果 if (results.length === 0) { const noResults = document.createElement('p'); noResults.textContent = '未找到相关结果'; container.appendChild(noResults); } else { // 创建结果列表 const resultsList = document.createElement('ul'); resultsList.style.listStyleType = 'none'; resultsList.style.padding = '0'; results.forEach(result => { const listItem = document.createElement('li'); listItem.style.marginBottom = '10px'; listItem.style.padding = '10px'; listItem.style.border = '1px solid #eee'; listItem.style.borderRadius = '3px'; const resultTitle = document.createElement('a'); resultTitle.href = result.link; resultTitle.textContent = result.title; resultTitle.target = '_blank'; resultTitle.style.fontWeight = 'bold'; resultTitle.style.display = 'block'; listItem.appendChild(resultTitle); const resultDetails = document.createElement('div'); resultDetails.style.fontSize = '0.9em'; resultDetails.style.color = '#666'; resultDetails.textContent = `${result.author} | ${result.format}`; listItem.appendChild(resultDetails); resultsList.appendChild(listItem); }); container.appendChild(resultsList); } // 将结果添加到页面 const contentContainer = document.querySelector('#item-primary-action') || document.querySelector('main'); if (contentContainer) { contentContainer.appendChild(container); } else { // 如果找不到合适的容器,添加到 body document.body.appendChild(container); } } // 页面加载完成后执行 window.addEventListener('load', main); })();