您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在SAGE期刊新版页面的文章工具栏中,添加一个指向“中图易阅通”平台的直接PDF下载按钮。
// ==UserScript== // @name SAGE to CNPeReading Direct PDF Button // @namespace https://greasyfork.org/zh-CN/users/1335433 // @version 2.0 // @description 在SAGE期刊新版页面的文章工具栏中,添加一个指向“中图易阅通”平台的直接PDF下载按钮。 // @author wakewon // @match https://journals.sagepub.com/doi/* // @grant none // @run-at document-idle // @license MIT // ==/UserScript== (function() { 'use strict'; // 1. 获取文章DOI const getDOI = () => { let doiMeta = document.querySelector('meta[name="dc.Identifier"][scheme="doi"]'); if (doiMeta && doiMeta.content) return doiMeta.content; doiMeta = document.querySelector('meta[name="publication_doi"]'); if (doiMeta && doiMeta.content) return doiMeta.content; const pathParts = window.location.pathname.split('/'); const doiIndex = pathParts.indexOf('doi'); if (doiIndex !== -1 && doiIndex + 2 < pathParts.length) { const doiFromPath = pathParts.slice(doiIndex + 1).join('/'); if (doiFromPath && doiFromPath.includes('/')) { return doiFromPath; } } console.warn('SAGE to CNPeReading: DOI could not be reliably extracted.'); return null; }; // 2. 创建并注入新按钮的函数 const createAndInjectButton = () => { const buttonId = 'cnpereading-pdf-script-container'; // 检查按钮是否已存在,防止重复添加 if (document.getElementById(buttonId)) { return; } const doi = getDOI(); if (!doi) { console.error('SAGE to CNPeReading: DOI not found, cannot create button.'); return; } // *** 使用中图易阅通下载链接 *** const newPdfUrl = `https://sage.cnpereading.com/paragraph/download/?doi=${doi}`; // 寻找一个稳定的位置来放置我们的按钮。 const anchor = document.querySelector('.core-nav-wrapper .core-sections-menu'); if (!anchor) { // 如果页面结构变化导致找不到锚点,则优雅地退出 return; } // 创建按钮的容器 div,并模仿原有 class 以便匹配样式 const buttonContainer = document.createElement('div'); buttonContainer.id = buttonId; buttonContainer.className = 'collateral-middle'; // 创建链接 (a 标签) const newButton = document.createElement('a'); newButton.href = newPdfUrl; newButton.target = '_blank'; newButton.title = '通过中图易阅通下载PDF'; // 创建内部结构,模仿原生按钮,并明确指出平台 newButton.innerHTML = `🚀 <span class="link-text">中图易阅通PDF</span>`; // 添加样式,使其醒目且融入工具栏 Object.assign(newButton.style, { cursor: 'pointer', color: '#007bff', // 蓝色,与“中图”平台风格更接近 fontWeight: 'bold', textDecoration: 'none' }); newButton.onmouseover = () => { newButton.style.textDecoration = 'underline'; }; newButton.onmouseout = () => { newButton.style.textDecoration = 'none'; }; buttonContainer.appendChild(newButton); // 将新按钮插入到“Contents”按钮的正后方 anchor.insertAdjacentElement('afterend', buttonContainer); console.log(`SAGE to CNPeReading: Injected button for DOI: ${doi}`); }; // 3. 使用 MutationObserver 监视页面动态变化 const observer = new MutationObserver(() => { createAndInjectButton(); }); observer.observe(document.body, { childList: true, subtree: true }); // 页面加载完成后立即执行一次 createAndInjectButton(); // 在一段时间后停止监视,以节省资源 setTimeout(() => { observer.disconnect(); }, 20000); })();