// ==UserScript== // @name 小说阅读器 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 强制绕过网站防嵌套限制,在任意网页小窗口看小说。带老板键(Alt+M) // @author Gemini // @match *://*/* // @grant GM_setValue // @grant GM_getValue // @grant GM_xmlhttpRequest // @connect * // @downloadURL https://update.greasyfork.icu/scripts/575618/%E5%B0%8F%E8%AF%B4%E9%98%85%E8%AF%BB%E5%99%A8.user.js // @updateURL https://update.greasyfork.icu/scripts/575618/%E5%B0%8F%E8%AF%B4%E9%98%85%E8%AF%BB%E5%99%A8.meta.js // ==/UserScript== (function() { 'use strict'; if (window.top !== window.self) return; // 防止嵌套套娃 // 创建主容器 const container = document.createElement('div'); container.id = 'moyu-container'; container.style.cssText = ` position: fixed; top: 100px; right: 20px; width: 350px; height: 500px; background: white; border: 1px solid #ccc; box-shadow: 0 4px 12px rgba(0,0,0,0.15); z-index: 2147483647; display: none; flex-direction: column; resize: both; overflow: hidden; opacity: 0.85; font-family: sans-serif; border-radius: 6px; `; // 顶部控制栏 const header = document.createElement('div'); header.style.cssText = ` padding: 6px; background: #f8f9fa; border-bottom: 1px solid #e9ecef; display: flex; gap: 5px; align-items: center; `; const urlInput = document.createElement('input'); urlInput.type = 'text'; urlInput.placeholder = '输入小说网址...'; urlInput.style.cssText = 'flex-grow: 1; padding: 4px; font-size: 12px; border: 1px solid #ccc; border-radius: 3px;'; urlInput.value = GM_getValue('moyu_last_url', ''); const loadBtn = document.createElement('button'); loadBtn.textContent = '加载'; loadBtn.style.cssText = 'font-size: 12px; padding: 4px 8px; cursor: pointer; border: 1px solid #ccc; background: white; border-radius: 3px;'; const opacityInput = document.createElement('input'); opacityInput.type = 'range'; opacityInput.min = '0.1'; opacityInput.max = '1'; opacityInput.step = '0.05'; opacityInput.value = '0.85'; opacityInput.style.cssText = 'width: 60px; cursor: pointer;'; header.appendChild(urlInput); header.appendChild(loadBtn); header.appendChild(opacityInput); // 内容展示区 (使用 srcdoc 强行渲染) const iframe = document.createElement('iframe'); iframe.style.cssText = ` width: 100%; flex-grow: 1; border: none; background: #fff; `; container.appendChild(header); container.appendChild(iframe); document.body.appendChild(container); // 核心抓取逻辑 (绕过限制) const loadUrl = () => { let url = urlInput.value.trim(); if (!url) return; if (!url.startsWith('http')) url = 'https://' + url; loadBtn.textContent = '加载中...'; // 使用油猴特权跨域请求 GM_xmlhttpRequest({ method: "GET", url: url, onload: function(response) { loadBtn.textContent = '加载'; if(response.status !== 200) { iframe.srcdoc = `