您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
劫持"中国专利审查信息查询"等类似使用PDF.js库PDF下载地址 Intercept requests to URLs containing "pdfjs/web/viewer.html?file=" and display the file parameter on the page.
// ==UserScript== // @name PDF.JS 劫持下载 Intercept PDF.js Viewer Requests // @namespace http://tampermonkey.net/ // @version 1.3.1 // @description 劫持"中国专利审查信息查询"等类似使用PDF.js库PDF下载地址 Intercept requests to URLs containing "pdfjs/web/viewer.html?file=" and display the file parameter on the page. // @author CVV // @match https://cpquery.cponline.cnipa.gov.cn/detail/index?* // @match https://cpquery.cponline.cnipa.gov.cn/detail/fujian?* // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; let alertCount = 0; // Keeps track of the number of active alerts // Function to create a download button and display the file parameter function createAlertDiv(message, fileUrl) { const alertDiv = document.createElement('div'); alertDiv.textContent = `File parameter: ${message}`; alertDiv.style.position = 'fixed'; alertDiv.style.top = `${10 + alertCount * 80}px`; // Calculate position dynamically alertDiv.style.left = '10px'; alertDiv.style.zIndex = '9999'; alertDiv.style.backgroundColor = 'rgba(0, 128, 0, 0.9)'; alertDiv.style.color = 'white'; alertDiv.style.padding = '10px'; alertDiv.style.borderRadius = '5px'; alertDiv.style.fontSize = '16px'; alertDiv.style.boxShadow = '0px 0px 10px rgba(0, 0, 0, 0.5)'; alertDiv.style.fontWeight = 'bold'; alertDiv.style.display = 'flex'; alertDiv.style.alignItems = 'center'; alertDiv.style.gap = '10px'; const closeButton = document.createElement('button'); closeButton.textContent = '✖'; closeButton.style.background = 'none'; closeButton.style.color = 'white'; closeButton.style.border = 'none'; closeButton.style.cursor = 'pointer'; closeButton.style.fontSize = '16px'; closeButton.style.fontWeight = 'bold'; const downloadButton = document.createElement('a'); downloadButton.textContent = 'Download'; downloadButton.href = fileUrl; downloadButton.download = ''; downloadButton.style.background = 'white'; downloadButton.style.color = 'green'; downloadButton.style.padding = '5px 10px'; downloadButton.style.borderRadius = '5px'; downloadButton.style.textDecoration = 'none'; downloadButton.style.fontWeight = 'bold'; // Close button logic closeButton.onclick = () => { document.body.removeChild(alertDiv); alertCount--; // Reduce the alert count updateAlertPositions(); // Update the positions of remaining alerts }; alertDiv.appendChild(downloadButton); alertDiv.appendChild(closeButton); document.body.appendChild(alertDiv); alertCount++; // Increment alert count } // Function to update the positions of all alerts function updateAlertPositions() { const alerts = document.querySelectorAll('div[data-alert]'); alerts.forEach((alert, index) => { alert.style.top = `${10 + index * 80}px`; // Recalculate position }); } // Intercept XMLHttpRequest const originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (method, url, ...rest) { console.log(`[Intercepted XMLHttpRequest] URL: ${url}`); if (url.includes('pdfjs/web/viewer.html?file=')) { const fileMatch = url.match(/file=([^&]+)/); if (fileMatch && fileMatch[1]) { const fileUrl = decodeURIComponent(fileMatch[1]); createAlertDiv(fileUrl, fileUrl); } } return originalOpen.call(this, method, url, ...rest); }; // Intercept Fetch API const originalFetch = window.fetch; window.fetch = function (input, init) { const url = typeof input === 'string' ? input : input.url; console.log(`[Intercepted Fetch] URL: ${url}`); if (url.includes('pdfjs/web/viewer.html?file=')) { const fileMatch = url.match(/file=([^&]+)/); if (fileMatch && fileMatch[1]) { const fileUrl = decodeURIComponent(fileMatch[1]); createAlertDiv(fileUrl, fileUrl); } } return originalFetch.call(this, input, init); }; // Monitor all network requests (including non-JS initiated) const observer = new PerformanceObserver((list) => { list.getEntries().forEach((entry) => { if (entry.name.includes('pdfjs/web/viewer.html?file=')) { console.log(`[PerformanceObserver] Network Request: ${entry.name}`); const fileMatch = entry.name.match(/file=([^&]+)/); if (fileMatch && fileMatch[1]) { const fileUrl = decodeURIComponent(fileMatch[1]); createAlertDiv(fileUrl, fileUrl); } } }); }); observer.observe({ type: 'resource', buffered: true }); })();