漫画柜双页浏览,全屏显示,从右到左显示。横图跨页;点击半屏翻页;记忆进度;
< Feedback on Manhuagui 阅读增强 · 全量加载/沉浸式双页排版/自动跨页显示
给后来者:
根据楼主的建议,使用gemini 2.5 pro进行了修改,将“主流程”部分代码替换为以下内容即可
// ===================== 主流程 =====================
(async function main() {
// 等待 SMH 和 pVars 等核心对象加载完成
const ok = await waitFor(() => window.SMH && window.pVars && document.querySelector('#mangaFile'));
if (!ok) {
console.error("阅读增强脚本:未能等到 Manhuagui 核心对象加载,脚本终止。");
return;
}
const total = getTotalPages();
if (!total) {
console.error("阅读增强脚本:未能获取到总页数。");
return;
}
// 使用您最初提出并验证有效的方案,并增加健壮性检查
const getPageUrls = () => {
// 内部函数,用于安全执行并解析返回的代码字符串
let parseCode = str => {
let si = str.indexOf("(");
let li = str.lastIndexOf(")") + 1; // 注意这里是 +1,以包含最后的括号
str = str.slice(si, li);
return new Function(`"use strict";return (${str})`)();
};
let getJson = () => {
// 1. 使用您最初发现的、有效的定位器
const scriptElement = [...document.scripts].find(
script => script.textContent.includes('x6c"]')
);
// 2. 检查是否成功找到脚本
if (!scriptElement) {
// 如果这个方法也失败了,说明网站结构确实发生了较大变化
throw new Error("无法找到包含 '.x6c\"]' 特征的漫画数据脚本。");
}
const code = scriptElement.textContent;
const data = parseCode(code);
// 从返回的字符串中提取纯净的 JSON 部分
let si = data.indexOf("{");
let li = data.lastIndexOf("}") + 1;
const jsonData = data.slice(si, li);
return JSON.parse(jsonData);
};
// 解析并构建最终的 URL 列表
const {
files,
path,
sl: { e, m }
} = getJson();
const serv = window.SMH.picserv.getHostName(window.pVars.curHost);
const urls = files.map(f => `https://${serv}.hamreus.com${path}${f}?e=${e}&m=${m}`);
urls.unshift(''); // 保持与原脚本 1-indexed 兼容
return urls;
};
let pageUrls = null;
try {
pageUrls = getPageUrls();
// 验证获取到的页数是否与页面显示的总页数匹配
if (!pageUrls || pageUrls.length - 1 !== total) {
console.error("新方法解析失败,或页数不匹配", `解析到 ${pageUrls ? pageUrls.length - 1 : 0} 页`, `期望 ${total} 页`);
return;
}
} catch (error) {
console.error("解析图片地址时出错:", error);
return;
}
const cfg = loadCfg();
buildReaderUI(pageUrls, total, cfg);
})();
好評
但有幾點瑕疵
1.取得圖片網址是調用SMH.utils.goPage,需要等待加載來擷取圖片網址,也同時等於對所有圖片發送出了請求,併發上限等於虛設,這樣很容易被Manhuagui屏蔽IP一段時間。
2.可能是因為取得圖片網址的方式,在單行本上使用會有一段時間無法操作,SMH.utils.goPage加載圖片後會一直返回頂部。
例如https://www.manhuagui.com/comic/25882/726481.html
建議直接解析混淆代碼來取得圖片網址
let get = () => { let parseCode = str => { let si = str.indexOf("("); let li = str.lastIndexOf(")") + 1; str = str.slice(si, li); return new Function(`"use strict";return (${str})`)(); }; let getJson = () => { let code = [...document.scripts].find(script => script.textContent.includes('x6c"]')).textContent; let data = parseCode(code); let si = data.indexOf("{"); let li = data.lastIndexOf("}") + 1; data = data.slice(si, li); return JSON.parse(data); }; let { files, path, sl: { e, m } } = getJson(); let serv = SMH.picserv.getHostName(pVars.curHost); return files.map(f => `https://${serv}.hamreus.com${path}${f}?e=${e}&m=${m}`); }; get();