Skip to content

Commit 9c8193f

Browse files
committed
chore: 🔖 Release 11.12.1
1 parent ba460c9 commit 9c8193f

5 files changed

Lines changed: 105 additions & 74 deletions

File tree

ComicRead-AdGuard.user.js

Lines changed: 47 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// ==UserScript==
22
// @name ComicRead
33
// @namespace ComicRead
4-
// @version 11.12.0
4+
// @version 11.12.1
55
// @description 为漫画站增加双页阅读、翻译等优化体验的增强功能。百合会(记录阅读历史、自动签到等)、百合会新站、动漫之家(解锁隐藏漫画)、E-Hentai(关联外站、快捷收藏、标签染色、识别广告页等)、nhentai(彻底屏蔽漫画、无限滚动)、Yurifans(自动签到)、拷贝漫画(copymanga)(显示最后阅读记录、解锁隐藏漫画)、Pixiv、PonpomuYuri、再漫画、明日方舟泰拉记事社、禁漫天堂、漫画柜(manhuagui)、漫画DB(manhuadb)、动漫屋(dm5)、绅士漫画(wnacg)、mangabz、komiic、MangaDex、NoyAcg、無限動漫、新新漫画、熱辣漫畫、hitomi、SchaleNetwork、kemono、nekohouse、welovemanga、HentaiZap、Tachidesk
66
// @description:en Add enhanced features to the comic site for optimized experience, including dual-page reading and translation. E-Hentai (Associate nhentai, Quick favorite, Colorize tags, Floating tag list, etc.) | nhentai (Totally block comics, Auto page turning) | hitomi | Anchira | kemono | nekohouse | welovemanga.
77
// @description:ru Добавляет расширенные функции для удобства на сайт, такие как двухстраничный режим и перевод.
@@ -9685,7 +9685,7 @@ const handleVersionUpdate = async () => {
96859685
_el$.firstChild;
96869686
web.insert(_el$, () => GM.info.script.version, null);
96879687
return _el$;
9688-
})(), web.template(\`<h3>新增\`)(), web.template(\`<ul><li><p>实现自动滚动功能 </p></li><li><p>支持 HentaiZap </p></li><li><p>ehentai 的「关联 nhentai」功能改为「关联外站」,增加关联 hitomi 的漫画\`)(), web.template(\`<h3>修复\`)(), web.template(\`<ul><li><p>调整滚动和翻页快捷键在卷轴模式下的行为,使之分别更接近方向键和 PageDown/PageUp 的表现 </p></li><li><p>修复在 pixiv 上失效的 bug\`)(), web.createComponent(solidJs.Show, {
9688+
})(), web.template(\`<h3>修复\`)(), web.template(\`<ul><li>修复拷贝漫画加载出错的 bug (提示「請下載安裝正版之後等待1小時」的话,重新登录一下就可以了)\`)(), web.createComponent(solidJs.Show, {
96899689
get when() {
96909690
return versionLt(version, '10.8.0');
96919691
},
@@ -13022,14 +13022,33 @@ const main = require('main');
1302213022
const helper = require('helper');
1302313023

1302413024

13025-
const headers = {
13026-
webp: '1',
13027-
region: '1',
13028-
'User-Agent': 'COPY/2.0.7|',
13029-
version: '2.0.7',
13030-
source: 'copyApp',
13031-
referer: 'com.copymanga.app-2.0.7'
13032-
};
13025+
const mobileApi = new class {
13026+
headers = {
13027+
webp: '1',
13028+
region: '1',
13029+
'User-Agent': 'COPY/2.0.7|',
13030+
version: '2.0.7',
13031+
source: 'copyApp',
13032+
referer: 'com.copymanga.app-2.0.7'
13033+
};
13034+
get = async (url, details, ...args) => main.request(url, {
13035+
responseType: 'json',
13036+
headers: this.headers,
13037+
...details
13038+
}, ...args);
13039+
}();
13040+
const pcApi = new class {
13041+
headers = {
13042+
'User-Agent': navigator.userAgent,
13043+
referer: location.href
13044+
};
13045+
get = async (url, details, ...args) => main.request(`https://mapi.copy20.com${url}`, {
13046+
responseType: 'json',
13047+
headers: this.headers,
13048+
fetch: false,
13049+
...details
13050+
}, ...args);
13051+
}();
1303313052

1303413053
// 在目录页显示上次阅读记录
1303513054
const handleLastChapter = comicName => {
@@ -13049,11 +13068,7 @@ const handleLastChapter = comicName => {
1304913068
})();
1305013069
a.textContent = '獲取中';
1305113070
a.removeAttribute('href');
13052-
const res = await main.request(`/api/v3/comic2/${comicName}/query?platform=3`, {
13053-
responseType: 'json',
13054-
fetch: false,
13055-
headers
13056-
});
13071+
const res = await pcApi.get(`/api/v3/comic2/${comicName}/query?platform=3`);
1305713072
const data = res.response?.results?.browse;
1305813073
if (!data) {
1305913074
a.textContent = data === null ? '無' : '未返回數據';
@@ -13084,11 +13099,8 @@ const buildChapters = async (comicName, hiddenType) => {
1308413099
response: {
1308513100
results
1308613101
}
13087-
} = await main.request(`/comicdetail/${comicName}/chapters`, {
13088-
responseType: 'json',
13089-
errorText: '加載漫畫目錄失敗',
13090-
headers,
13091-
fetch: false
13102+
} = await mobileApi.get(`/comicdetail/${comicName}/chapters`, {
13103+
errorText: '加載漫畫目錄失敗'
1309213104
});
1309313105
// 解码 api 返回的数据
1309413106
const decryptData = async (cipher, key, iv) => {
@@ -13100,7 +13112,7 @@ const buildChapters = async (comicName, hiddenType) => {
1310013112
}, false, ['decrypt']), new Uint8Array(cipher.match(/.{1,2}/g).map(byte => Number.parseInt(byte, 16))).buffer);
1310113113
return JSON.parse(new TextDecoder().decode(decryptedBuffer));
1310213114
};
13103-
const data = await decryptData(results.slice(16), unsafeWindow.dio || 'xxxmanga.woo.key', results.slice(0, 16));
13115+
const data = await decryptData(results.slice(16), unsafeWindow.dio || 'xxymanga.zzl.key', results.slice(0, 16));
1310413116
helper.log(data);
1310513117
const {
1310613118
build: {
@@ -13333,7 +13345,7 @@ const buildChapters = async (comicName, hiddenType) => {
1333313345
};
1333413346
(async () => {
1333513347
const token = document.cookie.split('; ').find(cookie => cookie.startsWith('token='))?.replace('token=', '');
13336-
if (token) Reflect.set(headers, 'Authorization', `Token ${token}`);
13348+
if (token) Reflect.set(mobileApi.headers, 'Authorization', `Token ${token}`);
1333713349
let comicName = '';
1333813350
let id = '';
1333913351
if (window.location.href.includes('/chapter/')) [,, comicName,, id] = window.location.pathname.split('/');else if (window.location.href.includes('/comicContent/')) [,,, comicName, id] = window.location.pathname.split('/');
@@ -13348,9 +13360,7 @@ const buildChapters = async (comicName, hiddenType) => {
1334813360
if (titleDom) titleDom.textContent = 'ComicRead 提示您:你訪問的內容暫不存在,請點選右下角按鈕嘗試加載漫畫';
1334913361
setComicLoad(async () => {
1335013362
if (titleDom) titleDom.textContent = '漫畫加載中,請坐和放寬';
13351-
const res = await main.request(`/api/v3/comic/${comicName}/chapter2/${id}?platform=3`, {
13352-
responseType: 'json',
13353-
headers,
13363+
const res = await pcApi.get(`/api/v3/comic/${comicName}/chapter2/${id}?platform=3`, {
1335413364
noCheckCode: true
1335513365
});
1335613366
if (res.status !== 200) {
@@ -13395,8 +13405,7 @@ const buildChapters = async (comicName, hiddenType) => {
1339513405
});
1339613406
const getCommentList = async () => {
1339713407
const chapter_id = window.location.pathname.split('/').at(-1);
13398-
const res = await main.request(`/api/v3/roasts?chapter_id=${chapter_id}&limit=100&offset=0&_update=true`, {
13399-
responseType: 'json',
13408+
const res = await pcApi.get(`/api/v3/roasts?chapter_id=${chapter_id}&limit=100&offset=0&_update=true`, {
1340013409
errorText: '获取漫画评论失败'
1340113410
});
1340213411
return res.response.results.list.map(({
@@ -13455,7 +13464,14 @@ const buildChapters = async (comicName, hiddenType) => {
1345513464
if (titleDom) {
1345613465
titleDom.textContent = 'ComicRead 提示您:你訪問的內容暫不存在,請坐和放寬,等待目錄生成';
1345713466
}
13458-
await buildChapters(comicName, hiddenType);
13467+
try {
13468+
await buildChapters(comicName, hiddenType);
13469+
} catch {
13470+
if (titleDom) titleDom.textContent = 'ComicRead 提示您:目錄生成失敗😢';
13471+
main.toast.error('目錄生成失敗😢', {
13472+
duration: Number.POSITIVE_INFINITY
13473+
});
13474+
}
1345913475
}
1346013476
if (!isMobile && token) handleLastChapter(comicName);
1346113477
}
@@ -13607,9 +13623,9 @@ const buildChapters = async (comicName, hiddenType) => {
1360713623
// #[禁漫天堂](https://18comic.vip)
1360813624
case 'jmcomic-zzz.one':
1360913625
case 'jmcomic-zzz.org':
13610-
case '18comic-phliu.club':
13611-
case '18comic-phliu.vip':
13612-
case '18comic-phliu.cc':
13626+
case '18comic-cnye.club':
13627+
case '18comic-cnye.org':
13628+
case '18comic-xq.cc':
1361313629
case '18comic.org':
1361413630
case '18comic.vip':
1361513631
{

ComicRead.user.js

Lines changed: 47 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// ==UserScript==
22
// @name ComicRead
33
// @namespace ComicRead
4-
// @version 11.12.0
4+
// @version 11.12.1
55
// @description 为漫画站增加双页阅读、翻译等优化体验的增强功能。百合会(记录阅读历史、自动签到等)、百合会新站、动漫之家(解锁隐藏漫画)、E-Hentai(关联外站、快捷收藏、标签染色、识别广告页等)、nhentai(彻底屏蔽漫画、无限滚动)、Yurifans(自动签到)、拷贝漫画(copymanga)(显示最后阅读记录、解锁隐藏漫画)、Pixiv、PonpomuYuri、再漫画、明日方舟泰拉记事社、禁漫天堂、漫画柜(manhuagui)、漫画DB(manhuadb)、动漫屋(dm5)、绅士漫画(wnacg)、mangabz、komiic、MangaDex、NoyAcg、無限動漫、新新漫画、熱辣漫畫、hitomi、SchaleNetwork、kemono、nekohouse、welovemanga、HentaiZap、Tachidesk
66
// @description:en Add enhanced features to the comic site for optimized experience, including dual-page reading and translation. E-Hentai (Associate nhentai, Quick favorite, Colorize tags, Floating tag list, etc.) | nhentai (Totally block comics, Auto page turning) | hitomi | Anchira | kemono | nekohouse | welovemanga.
77
// @description:ru Добавляет расширенные функции для удобства на сайт, такие как двухстраничный режим и перевод.
@@ -9617,7 +9617,7 @@ const handleVersionUpdate = async () => {
96179617
_el$.firstChild;
96189618
web.insert(_el$, () => GM.info.script.version, null);
96199619
return _el$;
9620-
})(), web.template(\`<h3>新增\`)(), web.template(\`<ul><li><p>实现自动滚动功能 </p></li><li><p>支持 HentaiZap </p></li><li><p>ehentai 的「关联 nhentai」功能改为「关联外站」,增加关联 hitomi 的漫画\`)(), web.template(\`<h3>修复\`)(), web.template(\`<ul><li><p>调整滚动和翻页快捷键在卷轴模式下的行为,使之分别更接近方向键和 PageDown/PageUp 的表现 </p></li><li><p>修复在 pixiv 上失效的 bug\`)(), web.createComponent(solidJs.Show, {
9620+
})(), web.template(\`<h3>修复\`)(), web.template(\`<ul><li>修复拷贝漫画加载出错的 bug (提示「請下載安裝正版之後等待1小時」的话,重新登录一下就可以了)\`)(), web.createComponent(solidJs.Show, {
96219621
get when() {
96229622
return versionLt(version, '10.8.0');
96239623
},
@@ -12954,14 +12954,33 @@ const main = require('main');
1295412954
const helper = require('helper');
1295512955

1295612956

12957-
const headers = {
12958-
webp: '1',
12959-
region: '1',
12960-
'User-Agent': 'COPY/2.0.7|',
12961-
version: '2.0.7',
12962-
source: 'copyApp',
12963-
referer: 'com.copymanga.app-2.0.7'
12964-
};
12957+
const mobileApi = new class {
12958+
headers = {
12959+
webp: '1',
12960+
region: '1',
12961+
'User-Agent': 'COPY/2.0.7|',
12962+
version: '2.0.7',
12963+
source: 'copyApp',
12964+
referer: 'com.copymanga.app-2.0.7'
12965+
};
12966+
get = async (url, details, ...args) => main.request(url, {
12967+
responseType: 'json',
12968+
headers: this.headers,
12969+
...details
12970+
}, ...args);
12971+
}();
12972+
const pcApi = new class {
12973+
headers = {
12974+
'User-Agent': navigator.userAgent,
12975+
referer: location.href
12976+
};
12977+
get = async (url, details, ...args) => main.request(`https://mapi.copy20.com${url}`, {
12978+
responseType: 'json',
12979+
headers: this.headers,
12980+
fetch: false,
12981+
...details
12982+
}, ...args);
12983+
}();
1296512984

1296612985
// 在目录页显示上次阅读记录
1296712986
const handleLastChapter = comicName => {
@@ -12981,11 +13000,7 @@ const handleLastChapter = comicName => {
1298113000
})();
1298213001
a.textContent = '獲取中';
1298313002
a.removeAttribute('href');
12984-
const res = await main.request(`/api/v3/comic2/${comicName}/query?platform=3`, {
12985-
responseType: 'json',
12986-
fetch: false,
12987-
headers
12988-
});
13003+
const res = await pcApi.get(`/api/v3/comic2/${comicName}/query?platform=3`);
1298913004
const data = res.response?.results?.browse;
1299013005
if (!data) {
1299113006
a.textContent = data === null ? '無' : '未返回數據';
@@ -13016,11 +13031,8 @@ const buildChapters = async (comicName, hiddenType) => {
1301613031
response: {
1301713032
results
1301813033
}
13019-
} = await main.request(`/comicdetail/${comicName}/chapters`, {
13020-
responseType: 'json',
13021-
errorText: '加載漫畫目錄失敗',
13022-
headers,
13023-
fetch: false
13034+
} = await mobileApi.get(`/comicdetail/${comicName}/chapters`, {
13035+
errorText: '加載漫畫目錄失敗'
1302413036
});
1302513037
// 解码 api 返回的数据
1302613038
const decryptData = async (cipher, key, iv) => {
@@ -13032,7 +13044,7 @@ const buildChapters = async (comicName, hiddenType) => {
1303213044
}, false, ['decrypt']), new Uint8Array(cipher.match(/.{1,2}/g).map(byte => Number.parseInt(byte, 16))).buffer);
1303313045
return JSON.parse(new TextDecoder().decode(decryptedBuffer));
1303413046
};
13035-
const data = await decryptData(results.slice(16), unsafeWindow.dio || 'xxxmanga.woo.key', results.slice(0, 16));
13047+
const data = await decryptData(results.slice(16), unsafeWindow.dio || 'xxymanga.zzl.key', results.slice(0, 16));
1303613048
helper.log(data);
1303713049
const {
1303813050
build: {
@@ -13265,7 +13277,7 @@ const buildChapters = async (comicName, hiddenType) => {
1326513277
};
1326613278
(async () => {
1326713279
const token = document.cookie.split('; ').find(cookie => cookie.startsWith('token='))?.replace('token=', '');
13268-
if (token) Reflect.set(headers, 'Authorization', `Token ${token}`);
13280+
if (token) Reflect.set(mobileApi.headers, 'Authorization', `Token ${token}`);
1326913281
let comicName = '';
1327013282
let id = '';
1327113283
if (window.location.href.includes('/chapter/')) [,, comicName,, id] = window.location.pathname.split('/');else if (window.location.href.includes('/comicContent/')) [,,, comicName, id] = window.location.pathname.split('/');
@@ -13280,9 +13292,7 @@ const buildChapters = async (comicName, hiddenType) => {
1328013292
if (titleDom) titleDom.textContent = 'ComicRead 提示您:你訪問的內容暫不存在,請點選右下角按鈕嘗試加載漫畫';
1328113293
setComicLoad(async () => {
1328213294
if (titleDom) titleDom.textContent = '漫畫加載中,請坐和放寬';
13283-
const res = await main.request(`/api/v3/comic/${comicName}/chapter2/${id}?platform=3`, {
13284-
responseType: 'json',
13285-
headers,
13295+
const res = await pcApi.get(`/api/v3/comic/${comicName}/chapter2/${id}?platform=3`, {
1328613296
noCheckCode: true
1328713297
});
1328813298
if (res.status !== 200) {
@@ -13327,8 +13337,7 @@ const buildChapters = async (comicName, hiddenType) => {
1332713337
});
1332813338
const getCommentList = async () => {
1332913339
const chapter_id = window.location.pathname.split('/').at(-1);
13330-
const res = await main.request(`/api/v3/roasts?chapter_id=${chapter_id}&limit=100&offset=0&_update=true`, {
13331-
responseType: 'json',
13340+
const res = await pcApi.get(`/api/v3/roasts?chapter_id=${chapter_id}&limit=100&offset=0&_update=true`, {
1333213341
errorText: '获取漫画评论失败'
1333313342
});
1333413343
return res.response.results.list.map(({
@@ -13387,7 +13396,14 @@ const buildChapters = async (comicName, hiddenType) => {
1338713396
if (titleDom) {
1338813397
titleDom.textContent = 'ComicRead 提示您:你訪問的內容暫不存在,請坐和放寬,等待目錄生成';
1338913398
}
13390-
await buildChapters(comicName, hiddenType);
13399+
try {
13400+
await buildChapters(comicName, hiddenType);
13401+
} catch {
13402+
if (titleDom) titleDom.textContent = 'ComicRead 提示您:目錄生成失敗😢';
13403+
main.toast.error('目錄生成失敗😢', {
13404+
duration: Number.POSITIVE_INFINITY
13405+
});
13406+
}
1339113407
}
1339213408
if (!isMobile && token) handleLastChapter(comicName);
1339313409
}
@@ -13539,9 +13555,9 @@ const buildChapters = async (comicName, hiddenType) => {
1353913555
// #[禁漫天堂](https://18comic.vip)
1354013556
case 'jmcomic-zzz.one':
1354113557
case 'jmcomic-zzz.org':
13542-
case '18comic-phliu.club':
13543-
case '18comic-phliu.vip':
13544-
case '18comic-phliu.cc':
13558+
case '18comic-cnye.club':
13559+
case '18comic-cnye.org':
13560+
case '18comic-xq.cc':
1354513561
case '18comic.org':
1354613562
case '18comic.vip':
1354713563
{

docs/.other/CHANGELOG.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
1-
# Changelog
1+
# Changelog
2+
3+
## [11.12.1](https://github.com/hymbz/ComicReadScript/compare/v11.12.0...v11.12.1) (2025-06-20)
24

5+
### Bug Fixes
6+
7+
* :bug: 修复拷贝漫画加载出错的 bug ([ba460c9](https://github.com/hymbz/ComicReadScript/commit/ba460c994251342e8b7bb3e58a1a0c90844efa05)), closes [#257](https://github.com/hymbz/ComicReadScript/issues/257)
8+
39
## [11.12.0](https://github.com/hymbz/ComicReadScript/compare/v11.11.0...v11.12.0) (2025-06-13)
410

511
### Features
@@ -1966,4 +1972,4 @@
19661972
### 修复
19671973

19681974
- 下载 Bug
1969-
- 上/下一话按钮显示位置错误的 Bug
1975+
- 上/下一话按钮显示位置错误的 Bug

docs/.other/LatestChange.md

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
1-
## [11.12.0](https://github.com/hymbz/ComicReadScript/compare/v11.11.0...v11.12.0) (2025-06-13)
2-
3-
### Features
4-
5-
* :sparkles: 实现自动滚动功能 ([3ab2272](https://github.com/hymbz/ComicReadScript/commit/3ab2272ba4db54c21062afafb25222f07c4e3022)), closes [#249](https://github.com/hymbz/ComicReadScript/issues/249)
6-
* :sparkles: 支持 HentaiZap ([d1aeaf8](https://github.com/hymbz/ComicReadScript/commit/d1aeaf8d5521e0ae1485962b5a43d924ccdf84de)), closes [#254](https://github.com/hymbz/ComicReadScript/issues/254)
7-
* :sparkles: ehentai 的「关联 nhentai」功能改为「关联外站」,增加关联 hitomi 的漫画 ([858cb28](https://github.com/hymbz/ComicReadScript/commit/858cb281952f2544bf0bfe73881e542a9290601a)), closes [#243](https://github.com/hymbz/ComicReadScript/issues/243)
1+
## [11.12.1](https://github.com/hymbz/ComicReadScript/compare/v11.12.0...v11.12.1) (2025-06-20)
82

93
### Bug Fixes
104

11-
* :bug: 调整滚动和翻页快捷键在卷轴模式下的行为,使之分别更接近方向键和 PageDown/PageUp 的表现 ([a414a90](https://github.com/hymbz/ComicReadScript/commit/a414a90ecf21a8304c9ff8765a9efb2e344f2825)), closes [#241](https://github.com/hymbz/ComicReadScript/issues/241)
12-
* :bug: 修复在 pixiv 上失效的 bug ([441f478](https://github.com/hymbz/ComicReadScript/commit/441f4783f841c80a014cd3c1d8ae45e6fdc7e252)), closes [#241](https://github.com/hymbz/ComicReadScript/issues/241)
5+
* :bug: 修复拷贝漫画加载出错的 bug (提示「請下載安裝正版之後等待1小時」的话,重新登录一下就可以了)

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "comic-read",
3-
"version": "11.12.0",
3+
"version": "11.12.1",
44
"description": "",
55
"author": "hymbz",
66
"license": "AGPL-3.0-or-later",

0 commit comments

Comments
 (0)