diff --git a/.github/ISSUE_TEMPLATE/03-autoPageRequest.yml b/.github/ISSUE_TEMPLATE/03-autoPageRequest.yml
index ec1f4a675..f812450ec 100644
--- a/.github/ISSUE_TEMPLATE/03-autoPageRequest.yml
+++ b/.github/ISSUE_TEMPLATE/03-autoPageRequest.yml
@@ -14,12 +14,13 @@ body:
> [!IMPORTANT]
> ### \# 申请必读:
> 1. 请先确认 **`不是动态加载内容`** 的网站(**鼠标指向页码,左下角不显示链接即代表是动态加载**),这类网站无法制作规则。
- > 2. 如 **`需要登录`** 才能看到内容,请先联系我**私下告诉账号**,否则我**无法凭空制作**翻页规则(网课类不会添加支持)。
- > 3. 请直接提供 **`具体页面的网页地址 URL`** (特别是一些**页面很多的网站**),尽量减少我的工作量,否则可能拒绝申请。
+ > 2. 如 **`需要登录`** 才能看到内容(无论注册有多简单),请**告诉我账号**,否则我**无法凭空制作**翻页规则(网课类不会支持)。
+ > 3. 请直接提供 **`具体页面的网页地址 URL`** (特别是一些**页面很多的网站**),尽量减少我的工作量,否则可能拒绝申请。
+ > 4. 对于 **`正版小说/漫画`** 网站,因为**反爬防盗**的原因也会导致无法制作规则(该脚本本质上也是爬虫,虽然只爬取下一页,但也会被阻碍)。
+ > 5. 对于 **`没有 HTTPS`** 的网站(这种网站目前全网占比极少,且大都是一些老旧网站),是不考虑添加支持的。
+ > 6. 如果你要申请对 `某个博客/论坛系统` 添加支持(即通用规则,所有使用这个博客/论坛系统的网站都会支持),那么需要提供 `官方博客/论坛地址` 及 其他**几个使用该博客/论坛系统的网站地址**,用于对比、验证,才能写出通用规则。
- > - 另外,对于**正版小说/漫画**网站,因为反爬防盗的原因也会导致无法制作规则(该脚本本质上也是爬虫,虽然只爬取下一页)。
- > - 另外,对于**没有 HTTPS** 的网站(这种网站目前全网占比极少,且大都是一些老旧网站),是不考虑添加支持。
- > - 另外,如果你要申请脚本对 `某个博客/论坛系统` 添加支持(即通用规则,所有使用这个博客/论坛系统的网站都会支持),那么需要提供 `官方博客/论坛地址` 及 其他**几个使用该博客/论坛系统的网站地址**,用于对比、验证,才能写出通用规则。
+ > - 对于需要登录才能看的网页,哪怕注册再简单我也不会去主动注册,你可以用一些 **`阅后即焚`** 的网站来告诉我你的账号密码(毕竟 Github 没有私信功能,你可以提前把密码改成别的,我用完了你再改回去),也可以用各种 **`在线临时邮箱`** 网站随便申请个账号给我用,但不管如何你必须提供一个账号给我才能编写规则,这是基本原则。
****
- type: input
id: websitename
diff --git a/Autopage.user.js b/Autopage.user.js
index 491292aca..030f01e51 100644
--- a/Autopage.user.js
+++ b/Autopage.user.js
@@ -3,7 +3,7 @@
// @name:zh-CN 自动无缝翻页
// @name:zh-TW 自動無縫翻頁
// @name:ru Автостраничник
-// @version 6.6.56
+// @version 6.6.71
// @author X.I.U
// @description ⭐Append the next page content to the bottom seamlessly (like a waterfall, Unlimited scrolling, no need to manually click on the next page) ⭐, support various forums, social networking, games, comics, novels, academics, search engines (Google, Bing, Yahoo...) and other websites~
// @description:zh-CN ⭐无缝加载 下一页内容 至网页底部(类似瀑布流,无限滚动,无需手动点击下一页)⭐,目前支持:【所有「Discuz!、Flarum、phpBB、MyBB、Xiuno、XenForo、NexusPHP...」论坛】【百度、谷歌(Google)、必应(Bing)、搜狗、微信、360、Yahoo、Yandex 等搜索引擎...】、贴吧、豆瓣、知乎、NGA、V2EX、起点中文、千图网、千库网、Pixabay、Pixiv、3DM、游侠网、游民星空、NexusMods、Steam 创意工坊、CS.RIN.RU、RuTracker、BT之家、萌番组、动漫花园、樱花动漫、爱恋动漫、AGE 动漫、Nyaa、SrkBT、RARBG、SubHD、423Down、不死鸟、扩展迷、小众软件、【动漫狂、动漫屋、漫画猫、漫画屋、漫画 DB、HiComic、Mangabz、Xmanhua 等漫画网站...】、PubMed、Z-Library、GreasyFork、Github、StackOverflow(以上仅一小部分常见网站,更多的写不下了...
@@ -22,9 +22,7 @@
// @connect raw.github.site
// @connect raw.github.store
// @connect raw.dgithub.xyz
-// @connect gh-proxy.ygxz.in
// @connect ghproxy.net
-// @connect github.moeyy.xyz
// @connect github.7boe.top
// @connect github.starrlzy.cn
// @connect cdn.jsdmirror.com
@@ -36,6 +34,7 @@
// @connect jsd.proxy.aks.moe
// @connect jsdelivr.pai233.top
// @connect gh-proxy.com
+// @connect hk.gh-proxy.org
// @connect www.xuexiniu.com
// @connect bbs.xuexiniu.com
// @connect weili.ooopic.com
@@ -105,8 +104,9 @@
//'https://gcore.jsdelivr.net/gh/XIU2/UserScript/other/Autopage/rules.json',
'https://fastly.jsdelivr.net/gh/XIU2/UserScript/other/Autopage/rules.json',
//'https://jsd.proxy.aks.moe/gh/XIU2/UserScript/other/Autopage/rules.json',
- 'https://jsdelivr.pai233.top/gh/XIU2/UserScript/other/Autopage/rules.json',
+ //'https://jsdelivr.pai233.top/gh/XIU2/UserScript/other/Autopage/rules.json',
'https://gh-proxy.com/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json',
+ 'https://hk.gh-proxy.org/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json',
]
const urlArr2 = [
'https://userscript.h233.eu.org/other/Autopage/rules.json',
@@ -117,13 +117,11 @@
'https://cdn.wget.la/gh/XIU2/UserScript/other/Autopage/rules.json',
'https://ghfast.top/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json',
//'https://raw.ixnic.net/XIU2/UserScript/master/other/Autopage/rules.json', // 解析空
- 'https://ghproxy.cfd/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json',
+ //'https://ghproxy.cfd/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', // 超时
//'https://raw.github.site/XIU2/UserScript/master/other/Autopage/rules.json', // 挂了
//'https://raw.github.store/XIU2/UserScript/master/other/Autopage/rules.json', // 挂了
'https://raw.dgithub.xyz/XIU2/UserScript/master/other/Autopage/rules.json',
- 'https://gh-proxy.ygxz.in/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json',
- 'https://ghproxy.net/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json',
- 'https://github.moeyy.xyz/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json',
+ //'https://ghproxy.net/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', // 挂了
],
loadMoreExclude1 = ['.smzdm.com','stackoverflow.com'],
loadMoreExclude2 = ['.steampowered.com','.zcool.com.cn'];
@@ -327,11 +325,11 @@
} else if (getAllCSS('.entry-content .single-content img').length > 3) {
DBSite.wp_article_post.pager.pageE = '.entry-content .single-content'
} else if (getAllCSS('.entry-content').length == 1) {
- DBSite.wp_article_post.pager.pageE = '.entry-content>*:not(.wbp-cbm):not(.page-links):not(.post-links):not(.article-paging):not(.entry-pagination):not(.pagination):not(.fenye):not(.open-message):not(#social):not(.article-social):not(.single-cat-tag):not(.single-meta):not(#fontsize):not(.clear):not(.tg-m):not(.tg-site):not(footer)'
+ DBSite.wp_article_post.pager.pageE = '.entry-content>*:not(.wbp-cbm):not(.page-links):not(.post-links):not(.article-paging):not(.entry-pagination):not(.pagination):not(.fenye):not(.open-message):not(#social):not(.article-social):not(.single-cat-tag):not(.single-meta):not(#fontsize):not(.clear):not(.tg-m):not(.tg-site):not(footer):not([class*=pagination])'
} else if (getAllCSS('.article-content').length == 1) {
- DBSite.wp_article_post.pager.pageE = '.article-content>*:not(.page-links):not(.post-links):not(.article-paging):not(.entry-pagination):not(.pagination):not(.fenye):not(.open-message):not(#social):not(.article-social):not(.single-cat-tag):not(.single-meta):not(#fontsize):not(.clear):not(.tg-m):not(.tg-site):not(footer)'
+ DBSite.wp_article_post.pager.pageE = '.article-content>*:not(.page-links):not(.post-links):not(.article-paging):not(.entry-pagination):not(.pagination):not(.fenye):not(.open-message):not(#social):not(.article-social):not(.single-cat-tag):not(.single-meta):not(#fontsize):not(.clear):not(.tg-m):not(.tg-site):not(footer):not([class*=pagination])'
} else if (getAllCSS('article').length == 1) {
- DBSite.wp_article_post.pager.pageE = 'article>*:not(.page-links):not(.post-links):not(.article-paging):not(.entry-pagination):not(.pagination):not(.fenye):not(.open-message):not(#social):not(.article-social):not(.single-cat-tag):not(.single-meta):not(#fontsize):not(.clear):not(.tg-m):not(.tg-site):not(footer)'
+ DBSite.wp_article_post.pager.pageE = 'article>*:not(.page-links):not(.post-links):not(.article-paging):not(.entry-pagination):not(.pagination):not(.fenye):not(.open-message):not(#social):not(.article-social):not(.single-cat-tag):not(.single-meta):not(#fontsize):not(.clear):not(.tg-m):not(.tg-site):not(footer):not([class*=pagination])'
}
if (DBSite.wp_article_post.pager.pageE != undefined) console.info(`[自动无缝翻页] - 部分使用 WordPress 的网站 - 文章内`); return 11;
}
@@ -378,7 +376,7 @@
if (getAllCSS('.posts-wrapper.row>div>article').length > 3) {
DBSite.wp_article.pager.pageE = '.posts-wrapper.row>div'
} else if (getAllXpath('//div[contains(@class,"row")]/div/article').length > 3) {
- DBSite.wp_article.pager.pageE = '//div[contains(@class,"row")]/div/article/parent::div'
+ DBSite.wp_article.pager.pageE = '//div[contains(@class,"row")]/div/article'
} else if (getAllCSS('article[id^="post-"]').length > 3) {
DBSite.wp_article.pager.pageE = 'article[id^="post-"]'
} else if (getAllCSS('article[class]').length > 3) {
@@ -419,8 +417,8 @@
console.info(`[自动无缝翻页] - <笔趣阁 1 - 手机版> 模板的小说网站`); return 201;
} else if (getCSS('#txt, .txt') && getCSS('#pb_next, .url_next') && getCSS('.chapter-control, .chapter-page-btn')) {
console.info(`[自动无缝翻页] - <笔趣阁 2> 模板的小说网站`); return 202;
- } else if ((getCSS('meta[name="description" i][content*="小说"], meta[name="description" i][content*="章节"], meta[name="description" i][content*="阅读"], meta[name="keywords" i][content*="笔趣"]') || location.hostname.indexOf('biqu')!=-1 || document.title.match(/笔趣阁|小说|章/)!=null) && getXpath('//a[contains(text(), "下一章") or contains(text(), "下一页") or contains(text(), "下一节")]')) {
- let biquge3_pageE= ['[id="chapter_content" i]','[class~="chapter_content" i]','[id="chaptercontent" i]','[class~="chaptercontent" i]','[class~="read_chapterdetail" i]','[id="booktext" i]','[class~="booktext" i]','[id="txtcontent" i]','[class~="txtcontent" i]','[id="textcontent" i]','[class~="textcontent" i]','[id="read-content" i]','[class~="read-content" i]','[id="txtnav" i]','[class~="txtnav" i]','[id="txt" i][class~="txt" i]','[id="contents" i]','[class~="contents" i]','[id="content" i]','[class~="content" i]','[id="contentbox" i]']
+ } else if ((getCSS('meta[name="description" i][content*="小说"], meta[name="description" i][content*="章节"], meta[name="description" i][content*="阅读"], meta[name="description" i][content*="小說"], meta[name="description" i][content*="章節"], meta[name="description" i][content*="閲讀"], meta[name="keywords" i][content*="笔趣"]') || location.hostname.indexOf('biqu')!=-1 || document.title.match(/笔趣阁|小说|小說|章/)!=null) && getXpath('//a[contains(text(), "下一章") or contains(text(), "下一页") or contains(text(), "下一节")][not(starts-with(@href,"javascript:"))]')) {
+ let biquge3_pageE= ['[id="chapter_content" i]','[class~="chapter_content" i]','[id="chaptercontent" i]','[class~="chaptercontent" i]','[class~="read_chapterdetail" i]','[id="booktext" i]','[class~="booktext" i]','[id="txtcontent" i]','[class~="txtcontent" i]','[id="textcontent" i]','[class~="textcontent" i]','[id="read-content" i]','[class~="read-content" i]','[id="txtnav" i]','[class~="txtnav" i]','[id="txt" i][class~="txt" i]','[id="contents" i]','[class~="contents" i]','[id="content" i]','[class~="content" i]','[id="contentbox" i]','.container>.con']
for(let biquge3_pageE_ of biquge3_pageE) {if (getAllCSS(biquge3_pageE_).length === 1) {DBSite.biquge3.pager.pageE = biquge3_pageE_;DBSite.biquge3.pager.insertP = [biquge3_pageE_,6];DBSite.biquge3.style = biquge3_pageE_+'>.readinline, ' + DBSite.biquge3.style;break;}}
if (DBSite.biquge3.pager.pageE != undefined) {console.info(`[自动无缝翻页] - <笔趣阁 3> 模板的小说网站`); return 203;}
}
@@ -484,7 +482,7 @@
/*
inherits: 继承标识,仅用于自定义规则,用于增删改某个外置规则的部分规则时,可使用该标识来省略不需要修改的规则,只写有变化的规则
- url: 匹配到该域名后要执行的函数/正则(一般用于根据 URL 分配相应翻页规则)
+ url: 匹配到该域名后要执行的函数/正则(一般用于根据 URL 分配相应翻页规则,url 规则中可通过操作 rule 这个对象变量来修改当前网页实际应用的规则)
urlC: 对于使用 pjax 技术的网站,需要监听 URL 变化来重新判断翻页规则(需要放在 url: 中,自定义规则的话需要使用 fun.isUrlC())
noReferer: 获取下一页内容时,不携带 Referer(部分网站携带与不携带可能不一样)
@@ -987,6 +985,20 @@ function: {
replaceE: '//p[@align][./font[@class="gray"]]'
}
}, // NexusPHP 论坛
+ "必应搜索 + 手机版": {
+ host: ['www.bing.com','cn.bing.com','www4.bing.com','global.bing.com'],
+ url: ()=> {urlC = true;if (lp == '/search') {curSite = DBSite["必应搜索 + 手机版"];if (isMobile()){curSite.blank=3;curSite.pager.type=6;curSite.pager.loadTime=1500;curSite.pager.scrollD=3000;}}},
+ style: '#b_footer,.b_msg,#bnp_rich_div,.cn_related_search_upsell_container',
+ history: true,
+ pager: {
+ nextL: 'a.sb_pagN,a.sb_halfnext,a.sb_fullnpl',
+ pageE: '#b_results>li.b_algo',
+ replaceE: '#b_results>.b_pag,#b_PagAboveFooter'
+ },
+ function: {
+ bF: (pageE)=>{pageE.forEach(function (one) {getAllCSS('div.rms_iac[data-src]',one).forEach(function (one1) {one1.outerHTML = `
`; }) }); return pageE}
+ }
+ }, // 必应搜索 + 手机版 为了解决部分用户/浏览器下因为 CSP 无法使用的问题,暂时先移动到内置规则
nexusmods: {
host: 'www.nexusmods.com',
url: ()=> {urlC = true; if (indexOF(/\/(mods|users)\/\d+/)) {if (indexOF('tab=posts','s')){curSite = DBSite.nexusmods_posts;} else if (indexOF('tab=user+files','s')){curSite = DBSite.nexusmods;}} else if (lp !== '/' && getCSS('.pagination a.page-selected')) {curSite = DBSite.nexusmods;}},
@@ -1675,8 +1687,44 @@ function: {
// 翻页类型 1/3
function getPageE(url) {
- if (!curSite.gmxhr) {
- // 依靠原生 XMLHttpRequest 尝试解决因缺失跨域 cookie 导致的问题(比如一些使用 Cloudflare CDN 人机验证的网站,会出现脚本后台获取到人机验证页面)
+ // Chrome 浏览器可以依靠改用原生 XMLHttpRequest 尝试解决因缺失跨域 cookie 导致的问题(比如一些使用 Cloudflare CDN 人机验证的网站,会出现脚本后台获取到人机验证页面)
+ // Firefox 浏览器则需要使用 GM_xmlhttpRequest 的 cookiePartition 参数来解决(该参数要 Tampermonkey v5.2 及以上才有)
+ // 如果翻页规则有 curSite.gmxhr 或是 Firefox 浏览器,则依然使用 GM_xmlhttpRequest+cookiePartition,反之则使用原生 XMLHttpRequest
+ if (curSite.gmxhr || navigator.userAgent.includes('Firefox')) {
+ GM_xmlhttpRequest({
+ url: url,
+ method: 'GET',
+ //overrideMimeType: 'text/html; charset=' + (document.characterSet||document.charset||document.inputEncoding),
+ responseType: 'arraybuffer', // Firefox 浏览器下 Tampermonkey 访问 GBK 网站时会乱码,只能改为 TextDecoder 手动转换编码
+ headers: {
+ 'x-requested-with': (curSite.xRequestedWith === true) ? 'XMLHttpRequest':null,
+ 'Referer': (curSite.noReferer === true) ? null:location.href,
+ 'Accept': 'text/html,application/xhtml+xml,application/xml'
+ },
+ cookiePartition: { // https://github.com/Tampermonkey/tampermonkey/issues/2057
+ topLevelSite: location.origin
+ },
+ timeout: 5000,
+ onload: function (response) {
+ try {
+ //console.log('URL:' + url, '最终 URL:' + response.finalUrl, '返回内容:' + response.responseText, response)
+ processElems(createDocumentByString((new TextDecoder((document.characterSet||document.charset||document.inputEncoding))).decode(response.response)));
+ //processElems(createDocumentByString(response.responseText));
+ } catch (e) {
+ console.error('[自动无缝翻页] - 处理获取到的下一页内容时出现问题,请检查!\n', e, '\nURL:' + url, '\n最终 URL:' + response.finalUrl, '\n返回状态:' + response.statusText, '\n返回内容:' + response.responseText);
+ }
+ },
+ onerror: function (response) {
+ console.log('URL:' + url, response)
+ GM_notification({text: '❌ 获取下一页失败...', timeout: 5000});
+ },
+ ontimeout: function (response) {
+ setTimeout(function(){curSite.pageUrl = '';}, 3000)
+ console.log('URL:' + url, response)
+ GM_notification({text: '❌ 获取下一页超时,可 3 秒后再次滚动网页重试(或尝试刷新网页)...', timeout: 5000});
+ }
+ });
+ } else {
const xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.overrideMimeType('text/html; charset=' + (document.characterSet||document.charset||document.inputEncoding));
@@ -1704,37 +1752,9 @@ function: {
GM_notification({text: '❌ 获取下一页超时,可 3 秒后再次滚动网页重试(或尝试刷新网页)...', timeout: 5000});
};
xhr.send();
- } else {
- GM_xmlhttpRequest({
- url: url,
- method: 'GET',
- overrideMimeType: 'text/html; charset=' + (document.characterSet||document.charset||document.inputEncoding),
- headers: {
- 'x-requested-with': (curSite.xRequestedWith === true) ? 'XMLHttpRequest':null,
- 'Referer': (curSite.noReferer === true) ? null:location.href,
- 'Accept': 'text/html,application/xhtml+xml,application/xml'
- },
- timeout: 5000,
- onload: function (response) {
- try {
- //console.log('URL:' + url, '最终 URL:' + response.finalUrl, '返回内容:' + response.responseText)
- processElems(createDocumentByString(response.responseText));
- } catch (e) {
- console.error('[自动无缝翻页] - 处理获取到的下一页内容时出现问题,请检查!\n', e, '\nURL:' + url, '\n最终 URL:' + response.finalUrl, '\n返回状态:' + response.statusText, '\n返回内容:' + response.responseText);
- }
- },
- onerror: function (response) {
- console.log('URL:' + url, response)
- GM_notification({text: '❌ 获取下一页失败...', timeout: 5000});
- },
- ontimeout: function (response) {
- setTimeout(function(){curSite.pageUrl = '';}, 3000)
- console.log('URL:' + url, response)
- GM_notification({text: '❌ 获取下一页超时,可 3 秒后再次滚动网页重试(或尝试刷新网页)...', timeout: 5000});
- }
- });
}
}
+
// 翻页类型 4
function getPageE_(url, type = '', method = 'GET', data = '', type2) {
let mimeType,accept;
@@ -1891,7 +1911,7 @@ function: {
let scrollHeight = (iframe.contentWindow.document.documentElement.scrollHeight || iframe.contentWindow.document.body.scrollHeight)/10
iframe.contentWindow.scrollTo(0, 999999);
iframe.contentWindow.scrollTo(0, scrollHeight*time1);
- if (++time1 == 10) {
+ if (++time1 == 12) {
clearInterval(time2);
processElems(iframe.contentWindow.document); // 插入/替换元素等
pausePage = true; // 恢复翻页
@@ -2178,7 +2198,7 @@ function: {
if (endP && (parseInt(nextNum) > parseInt(endP))) return ''
} else {
nextNum = initP;
- if (endP && (parseInt(nextNum) >= parseInt(endP))) return ''
+ if (endP && (parseInt(nextNum) > parseInt(endP))) return ''
}
let url = '';
if (location.pathname) {
@@ -2195,13 +2215,13 @@ function: {
}
// 通用型获取下一页地址(从 URL 中获取页码,并页码+1,URL 替换 page= 参数,后三个参数可以省略)
function getNextUP(pf, reg, lp = location.pathname, initP = '2', endP) {
- let nextNum = getSearch(pf.replace('=',''));
- if (nextNum) {
- nextNum = String(parseInt(nextNum)+1);
- if (endP && (parseInt(nextNum) > parseInt(endP))) return ''
- } else {
- nextNum = initP;
- if (endP && (parseInt(nextNum) >= parseInt(endP))) return ''
+ let nextNum = getSearch(pf.replace('=','')); // 获取参数中的 page= 值
+ if (nextNum) { // 如果参数中存在 page=
+ nextNum = String(parseInt(nextNum)+1); // 下一页页码就是当前页码参数值 +1
+ if (endP && (parseInt(nextNum) > parseInt(endP))) return '' // 如果 endP 为真且 下一页页码 大于 endP(页码最大值)则终止
+ } else { // 如果参数中不存在 page=
+ nextNum = initP; // 因为不存在,所以一般都代表当前是位于第 1 页,那么下一页页码就设置为初始页码(默认 2)
+ if (endP && (parseInt(nextNum) > parseInt(endP))) return '' // 如果 endP 为真且 下一页页码 大于 endP(页码最大值)则终止
}
let url = '';
if (location.search) {
@@ -2422,7 +2442,7 @@ function: {
} else if (curSite.blank === 5 || curSite.blank === 6) { // 清理 元素的点击事件
if (!pageE) pageE = getAll(curSite.pager.pageE)
pageE.forEach(function (dd) {
- getAllCSS('a[href]:not([target="_blank"]):not([onclick]):not([href^="#"]):not([href^="javascript:"])',dd).forEach(function (a) {
+ getAllCSS('a[href]:not([target="_blank"]):not([href^="#"]):not([href^="javascript:"])',dd).forEach(function (a) {
if (a.href.slice(0,4) == 'http') {
const clonedLink = a.cloneNode(true); // 克隆原 a 元素
clonedLink.target = '_blank'; // 通过添加 target="_blank" 属性来新标签页打开,可以解决大部分情况
@@ -2635,7 +2655,7 @@ function: {
// "aaa" 是规则名,唯一,因为 自定义翻页规则 优先级最高,所以会覆盖同名的 外置翻页规则
// "host" 是域名,支持正则表达式(如 示例四),也可以像这样 示例三 那样写多个域名或正则表达式(当然也可以混用),如果省略,则默认匹配所有域名(会对所有域名匹配 url 规则判断,可以当成一个简单的外置/自定义通用规则的方案)
-// "url" 是用来控制哪些网站中页面适用该规则,省略后代表该规则应用于全站(如果不知道写什么,那么就写 return fun.isPager() 这样脚本会默认自动匹配当前网站下存在 nextL 及 pageE 元素的网页,大部分网站是没问题的,如果改为匹配 replaceE 或者其他组合,那么请去上面的 Github Issues 里的 内置函数 中查看具体使用方法)
+// "url" 是用来控制哪些网站中页面适用该规则,省略后代表该规则应用于全站(如果不知道写什么,那么就写 return fun.isPager() 这样脚本会默认自动匹配当前网站下存在 nextL 及 pageE 元素的网页,大部分网站是没问题的,如果改为匹配 replaceE 或者其他组合,那么请去上面的 Github Issues 里的 内置函数 中查看具体使用方法;另外,url 规则中可通过操作 rule 这个对象变量来修改当前网页实际应用的规则,如 rule.pager.pageE='#a' 具体示例也见 Github Issues 里)
// "nextL" 是用来指定含有下一页地址的元素选择器(CSS 或 XPath 都行,一般都是 <a> 元素)
// "pageE" 是指定要从下一页获取的元素选择器(也就是网页主体内容),并将其插入当前网页中同样元素的末尾
@@ -2724,7 +2744,13 @@ function: {
GM_setValue('menu_customRules', customRules)
location.reload();
} catch (e) {
- const match = e.message.match(/at position (\d+)/),position = parseInt(match[1]);
+ let match = e.message.match(/at position (\d+)/),position;
+ if (match) {
+ position = parseInt(match[1]);
+ } else {
+ match = e.message.match(/line (\d+) column (\d+)/i);
+ position = calculatePositionFromLineColumn(customRules,match[1],match[2])
+ }
console.error('自定义规则存在格式错误:\n' + e.message + '\n错误位置为该区域中间:\n------\n' + customRules.slice((position<30)?0:position-30,position+29) + '\n------\n\n常见格式错误:\n1. 逗号:每组 { } 中的最后一个值末尾不能加逗号\n2. 转义:如果正则表达式中含有转义符 \\ 那就要对其再次转义为 \\\\\n3. 引号:规则中冒号左右的内容都需要加上双引号,如果内容中含有双引号则需要对双引号转义(即 \\" 这样),或改为单引号')
window.alert('自定义规则存在格式错误:\n' + e.message + '\n错误位置为该区域中间:\n------\n' + customRules.slice((position<30)?0:position-30,position+29) + '\n------\n点击【确定】后脚本会为你定位并选中编辑框中格式错误的文本(部分格式错误定位可能不太精确,但错误一定是在选中文本的附近,如果是选中了行首的空格,则说明格式错误来自上一行末尾逗号)\n\n常见格式错误:\n1. 逗号:每组 { } 中的最后一个值末尾不能加逗号\n2. 转义:如果正则表达式中含有转义符 \\ 那就要对其再次转义为 \\\\\n3. 引号:规则中冒号左右的内容都需要加上双引号,如果内容中含有双引号则需要对双引号转义(即 \\" 这样),或改为单引号');
customRules_textarea.selectionStart = position-1; // 选中开始位置
@@ -2735,6 +2761,40 @@ function: {
getCSS('#Autopage_customRules_cancel', shadowRoot).onclick = function () {document.documentElement.style.overflow = document.body.style.overflow = ''; getCSS('#Autopage_customRules').remove();}
}
+ /**
+ * 根据行号和列号计算字符串中的 position 位置
+ * @param {string} text - 完整的文本内容
+ * @param {number} line - 行号(从1开始)
+ * @param {number} column - 列号(从1开始)
+ * @returns {number} position 位置(从0开始)
+ */
+ function calculatePositionFromLineColumn(text, line, column) {
+ if (!text || line < 1 || column < 1) {
+ return -1;
+ }
+
+ const lines = text.split('\n');
+
+ // 如果指定行超过文本行数,返回-1
+ if (line > lines.length) {
+ return -1;
+ }
+
+ let position = 0;
+
+ // 计算前 (line-1) 行的总长度(包括换行符)
+ for (let i = 0; i < line - 1; i++) {
+ position += lines[i].length + 1; // +1 表示换行符
+ }
+
+ // 计算当前行的列位置(列号从1开始,position从0开始)
+ // 注意:列号不能超过当前行的长度+1(+1表示可以指向行尾)
+ const currentLine = lines[line - 1];
+ const columnPosition = Math.min(column - 1, currentLine.length);
+
+ return position + columnPosition;
+ }
+
// 自定义的 stringify 函数,将 [ ] 内的元素从默认的 换行显示 格式化为 一行显示,用于显示自定义翻页规则等给用户看的场景
function customStringify(obj) {
return JSON.stringify(obj, null, 4)
diff --git a/GithubEnhanced-High-Speed-Download.user.js b/GithubEnhanced-High-Speed-Download.user.js
index 0af4b9c78..72d28a06d 100644
--- a/GithubEnhanced-High-Speed-Download.user.js
+++ b/GithubEnhanced-High-Speed-Download.user.js
@@ -3,7 +3,7 @@
// @name:zh-CN Github 增强 - 高速下载
// @name:zh-TW Github 增強 - 高速下載
// @name:ru Улучшение GitHub – быстрое скачивание
-// @version 2.6.19
+// @version 2.6.34
// @author X.I.U
// @description High-speed download of Git Clone/SSH, Release, Raw, Code(ZIP) and other files (Based on public welfare), project list file quick download (☁)
// @description:zh-CN 高速下载 Git Clone/SSH、Release、Raw、Code(ZIP) 等文件 (公益加速)、项目列表单文件快捷下载 (☁)
@@ -15,6 +15,7 @@
// @match *://kkgithub.com/*
// @match *://github.site/*
// @match *://github.store/*
+// @match *://bgithub.xyz/*
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAACEUExURUxpcRgWFhsYGBgWFhcWFh8WFhoYGBgWFiUlJRcVFRkWFhgVFRgWFhgVFRsWFhgWFigeHhkWFv////////////r6+h4eHv///xcVFfLx8SMhIUNCQpSTk/r6+jY0NCknJ97e3ru7u+fn51BOTsPCwqGgoISDg6empmpoaK2srNDQ0FhXV3eXcCcAAAAXdFJOUwCBIZXMGP70BuRH2Ze/LpIMUunHkpQR34sfygAAAVpJREFUOMt1U+magjAMDAVb5BDU3W25b9T1/d9vaYpQKDs/rF9nSNJkArDA9ezQZ8wPbc8FE6eAiQUsOO1o19JolFibKCdHGHC0IJezOMD5snx/yE+KOYYr42fPSufSZyazqDoseTPw4lGJNOu6LBXVUPBG3lqYAOv/5ZwnNUfUifzBt8gkgfgINmjxOpgqUA147QWNaocLniqq3QsSVbQHNp45N/BAwoYQz9oUJEiE4GMGfoBSMj5gjeWRIMMqleD/CAzUHFqTLyjOA5zjNnwa4UCEZ2YK3khEcBXHjVBtEFeIZ6+NxYbPqWp1DLKV42t6Ujn2ydyiPi9nX0TTNAkVVZ/gozsl6FbrktkwaVvL2TRK0C8Ca7Hck7f5OBT6FFbLATkL2ugV0tm0RLM9fedDvhWstl8Wp9AFDjFX7yOY/lJrv8AkYuz7fuP8dv9izCYH+x3/LBnj9fYPBTpJDNzX+7cAAAAASUVORK5CYII=
// @grant GM_registerMenuCommand
// @grant GM_unregisterMenuCommand
@@ -34,105 +35,107 @@
(function() {
'use strict';
- var menu_rawFast = GM_getValue('xiu2_menu_raw_fast'), menu_rawFast_ID, menu_rawDownLink_ID, menu_gitClone_ID, menu_feedBack_ID;
+ var menu_rawFast = GM_getValue('xiu2_menu_raw_fast'), menu_rawFast_ID, menu_rawDownLink_ID, menu_gitClone_ID, menu_customUrl_ID, menu_feedBack_ID;
const download_url_us = [
['https://gh.h233.eu.org/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@X.I.U/XIU2] 提供'],
- //['https://gh.api.99988866.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [hunshcn/gh-proxy] 提供'], // 官方演示站用的人太多了
- ['https://ghproxy.1888866.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [WJQSERVER-STUDIO/ghproxy] 提供'],
- ['https://gh.ddlc.top/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@mtr-static-official] 提供'],
+ //['https://gh.api.99988866.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.com/hunshcn/gh-proxy] 提供'], // 官方演示站用的人太多了
+ //['https://ghproxy.1888866.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [WJQSERVER-STUDIO/ghproxy] 提供'],//挂了
+ ['https://rapidgit.jjda.de5.net/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [热心网友] 提供'],
+ ['https://gh.ddlc.top/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@mtr-static-official] 提供'], // Error 1027
//['https://gh2.yanqishui.work/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@HongjieCN] 提供'], // 错误
//['https://dl.ghpig.top/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [feizhuqwq.com] 提供'], // ERR_SSL_VERSION_OR_CIPHER_MISMATCH
//['https://gh.flyinbug.top/gh/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [Mintimate] 提供'], // 错误
- ['https://slink.ltd/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [知了小站] 提供'],
//['https://gh.con.sh/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.con.sh] 提供'], // Suspent due to abuse report.
//['https://ghps.cc/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghps.cc] 提供'], // 提示 blocked
- ['https://gh-proxy.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.com] 提供'],
+ ['https://gh-proxy.org/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.com] 提供'],
+ //['https://hk.gh-proxy.org/https://github.com', '其他', '[中国香港] - 该公益加速源由 [gh-proxy.com] 提供'],
+ ['https://cdn.gh-proxy.org/https://github.com', '其他', '[Fastly CDN] - 该公益加速源由 [gh-proxy.com] 提供'],
+ ['https://edgeone.gh-proxy.org/https://github.com', '其他', '[edgeone] - 该公益加速源由 [gh-proxy.com] 提供'],
['https://cors.isteed.cc/github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@Lufs\'s] 提供'],
- ['https://hub.gitmirror.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [GitMirror] 提供'],
- ['https://down.sciproxy.com/github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [sciproxy.com] 提供'],
- ['https://ghproxy.cfd/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供'],
+ //['https://hub.gitmirror.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [GitMirror] 提供'], // 域名无解析
+ //['https://down.sciproxy.com/github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [sciproxy.com] 提供'], // 522
+ ['https://ghproxy.it/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供'],
//['https://github.site', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], // 挂了
//['https://github.store', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], // 挂了
//['https://gh.jiasu.in/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@0-RTT] 提供'], // 404
['https://github.boki.moe/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [blog.boki.moe] 提供'],
- ['https://github.moeyy.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供'],
+ //['https://github.moeyy.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供'], // 墙了
['https://gh-proxy.net/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.net] 提供'],
- ['https://github.yongyong.online/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.yongyong.online] 提供'],
- ['https://ghdd.862510.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghdd.862510.xyz] 提供'],
- ['https://hub.whtrys.space', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [FastGit 群组成员] 提供'],
+ //['https://github.yongyong.online/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.yongyong.online] 提供'], // 空白
+ //['https://ghdd.862510.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghdd.862510.xyz] 提供'], // turnstile token missing
['https://gh.jasonzeng.dev/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.jasonzeng.dev] 提供'],
['https://gh.monlor.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.monlor.com] 提供'],
['https://fastgit.cc/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [fastgit.cc] 提供'],
['https://github.tbedu.top/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.tbedu.top] 提供'],
- ['https://github.geekery.cn/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.geekery.cn] 提供'],
- ['https://gh-proxy.linioi.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.linioi.com] 提供'],
+ //['https://github.geekery.cn/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.geekery.cn] 提供'], // 下载认证信息 用户名:123123 密 码:123123
['https://firewall.lxstd.org/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [firewall.lxstd.org] 提供'],
- ['https://mirrors.chenby.cn/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [mirrors.chenby.cn] 提供'],
['https://github.ednovas.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.ednovas.xyz] 提供'],
['https://ghfile.geekertao.top/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghfile.geekertao.top] 提供'],
- ['https://ghp.keleyaa.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghp.keleyaa.com] 提供'],
- ['https://github.wuzhij.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.wuzhij.com] 提供'],
- ['https://gh.cache.cloudns.org/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.cache.cloudns.org] 提供'],
+ ['https://ghp.keleyaa.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghp.keleyaa.com] 提供'], // Error 1027
+ //['https://github.wuzhij.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.wuzhij.com] 提供'], // 404
['https://gh.chjina.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.chjina.com] 提供'],
['https://ghpxy.hwinzniej.top/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghpxy.hwinzniej.top] 提供'],
['https://cdn.crashmc.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [cdn.crashmc.com] 提供'],
- ['https://ghproxy.imciel.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghproxy.imciel.com] 提供'],
+ ['https://git.yylx.win/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [git.yylx.win] 提供'],
['https://gitproxy.mrhjx.cn/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gitproxy.mrhjx.cn] 提供'],
['https://ghproxy.cxkpro.top/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghproxy.cxkpro.top] 提供'],
['https://gh.xxooo.cf/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.xxooo.cf] 提供'],
- ['https://ghproxy.xiaopa.cc/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghproxy.xiaopa.cc] 提供'],
- ['https://gh.944446.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.944446.xyz] 提供'],
['https://github.limoruirui.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.limoruirui.com] 提供'],
- ['https://api-gh.muran.eu.org/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [api-gh.muran.eu.org] 提供'],
- ['https://gh.idayer.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.idayer.com] 提供'],
- ['https://gh.zwnes.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.zwnes.xyz] 提供'],
+ ['https://gh.idayer.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.idayer.com] 提供'], // Error 1027
+ //['https://gh.zwnes.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.zwnes.xyz] 提供'], // 超时
['https://gh.llkk.cc/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh.llkk.cc] 提供'],
['https://down.npee.cn/?https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [npee社区] 提供'],
+ ['https://raw.ihtw.moe/github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [raw.ihtw.moe] 提供'],
+ ['https://xget.xi-xu.me/gh', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.com/xixu-me/Xget] 提供'],
['https://dgithub.xyz', '美国', '[美国 西雅图] - 该公益加速源由 [dgithub.xyz] 提供'],
- ['https://gh-proxy.ygxz.in/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@一个小站 www.ygxz.in] 提供'],
+ //['https://gh-proxy.ygxz.in/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@一个小站 www.ygxz.in] 提供'], // 被蔷
['https://gh.nxnow.top/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [gh.nxnow.top] 提供'],
- ['https://gh-proxy.ygxz.in/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [gh-proxy.ygxz.in] 提供'],
- ['https://gh.zwy.me/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [gh.zwy.me] 提供'],
+ ['https://gh.zwy.one/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [gh.zwy.one] 提供'],
['https://ghproxy.monkeyray.net/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [ghproxy.monkeyray.net] 提供'],
['https://gh.xx9527.cn/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [gh.xx9527.cn] 提供'],
- //['https://download.ixnic.net', '美国', '[美国 洛杉矶] - 该公益加速源由 [@黃埔興國] 提供'], // 解析空
//], download_url = [ // 为了缓解非美国公益节点压力(考虑到很多人无视前面随机的美国节点),干脆也将其加入随机
- ['https://ghproxy.net/https://github.com', '英国', '[英国伦敦] - 该公益加速源由 [ghproxy.net] 提供
提示:希望大家尽量多使用美国节点(每次随机 负载均衡),
避免流量都集中到亚洲公益节点,减少成本压力,公益才能更持久~'],
+ //['https://ghproxy.net/https://github.com', '英国', '[英国伦敦] - 该公益加速源由 [ghproxy.net] 提供
提示:希望大家尽量多使用美国节点(每次随机 负载均衡),
避免流量都集中到亚洲公益节点,减少成本压力,公益才能更持久~'], // 挂了
['https://ghfast.top/https://github.com', '其他', '[日本、韩国、新加坡、美国、德国等](CDN 不固定) - 该公益加速源由 [ghproxy.link] 提供
提示:希望大家尽量多使用美国节点(每次随机 负载均衡),
避免流量都集中到亚洲公益节点,减少成本压力,公益才能更持久~'],
['https://wget.la/https://github.com', '其他', '[中国香港、中国台湾、日本、美国等](CDN 不固定) - 该公益加速源由 [ucdn.me] 提供
提示:希望大家尽量多使用美国节点(每次随机 负载均衡),
避免流量都集中到亚洲公益节点,减少成本压力,公益才能更持久~'],
- ['https://kkgithub.com', '其他', '[中国香港、日本、韩国、新加坡等] - 该公益加速源由 [help.kkgithub.com] 提供
提示:希望大家尽量多使用美国节点(每次随机 负载均衡),
避免流量都集中到亚洲公益节点,减少成本压力,公益才能更持久~'],
+ //['https://hub.glowp.xyz/https://github.com', '其他', '[中国香港] - 该公益加速源由 [hub.glowp.xyz] 提供
提示:希望大家尽量多使用美国节点(每次随机 负载均衡),
避免流量都集中到亚洲公益节点,减少成本压力,公益才能更持久~'],
+ //['https://kkgithub.com', '其他', '[中国香港、日本、韩国、新加坡等] - 该公益加速源由 [help.kkgithub.com] 提供
提示:希望大家尽量多使用美国节点(每次随机 负载均衡),
避免流量都集中到亚洲公益节点,减少成本压力,公益才能更持久~'], // 404
], clone_url = [
['https://gitclone.com', '国内', '[中国 国内] - 该公益加速源由 [GitClone] 提供
- 缓存:有
- 首次比较慢,缓存后较快'],
['https://kkgithub.com', '香港', '[中国香港、日本、新加坡等] - 该公益加速源由 [help.kkgithub.com] 提供'],
//['https://gitdl.cn/https://github.com', '香港', '[中国香港] - 该公益加速源由 [gitdl] 提供'], // 输出文件错误
//['https://gitproxy.click/https://github.com', '香港', '[中国 香港] - 该公益加速源由 [gitproxy.click] 提供'],
//['https://cdn.moran233.xyz/https://github.com', '香港', '[中国 香港] - 该公益加速源由 [cdn.moran233.xyz] 提供'],
+ //['https://hub.glowp.xyz/https://github.com', '香港', '[中国香港] - 该公益加速源由 [hub.glowp.xyz] 提供'],
['https://wget.la/https://github.com', '香港', '[中国香港、中国台湾、日本、美国等](CDN 不固定) - 该公益加速源由 [ucdn.me] 提供'],
+ ['https://hk.gh-proxy.org/https://github.com', '香港', '[中国香港] - 该公益加速源由 [gh-proxy.com] 提供'],
['https://ghfast.top/https://github.com', '韩国', '[日本、韩国、新加坡、美国、德国等](CDN 不固定) - 该公益加速源由 [ghproxy] 提供'],
- //['https://gh.catmak.name/https://github.com', '韩国', '[韩国 首尔] - 该公益加速源由 [gh.catmak.name] 提供'],
+ //['https://gh.catmak.name/https://raw.githubusercontent.com', '韩国', '[韩国 首尔] - 该公益加速源由 [gh.catmak.name] 提供'],
['https://githubfast.com', '韩国', '[韩国] - 该公益加速源由 [Github Fast] 提供'],
- ['https://ghproxy.net/https://github.com', '日本', '[日本 大阪] - 该公益加速源由 [ghproxy.net] 提供'],
+ //['https://ghproxy.net/https://github.com', '日本', '[日本 大阪] - 该公益加速源由 [ghproxy.net] 提供'], // 挂了
//['https://proxy.yaoyaoling.net/https://github.com', '日本', '[日本 东京] - 该公益加速源由 [proxy.yaoyaoling.net] 提供'],
//['https://g.blfrp.cn/https://github.com', '日本', '[日本 东京] - 该公益加速源由 [g.blfrp.cn] 提供'],
//['https://github.3x25.com/https://github.com', '新加坡', '[新加坡] - 该公益加速源由 [github.3x25.com] 提供'],
+ //['https://raw.bgithub.xyz', '荷兰', '[荷兰] - 该公益加速源由 [bgithub.xyz] 提供
- 缓存:有'],
//['https://ghproxy.1888866.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [WJQSERVER-STUDIO/ghproxy] 提供'],
- //['https://github.moeyy.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供'],
+ //['https://github.moeyy.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供'], // 墙了
//['https://gh-proxy.net/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.net] 提供'],
+ //['https://rapidgit.jjda.de5.net/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [热心网友] 提供'],
//['https://github.yongyong.online/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.yongyong.online] 提供'],
//['https://ghdd.862510.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghdd.862510.xyz] 提供'],
- //['https://slink.ltd/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [知了小站] 提供'],
- //['https://hub.gitmirror.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [GitMirror] 提供'],
- //['https://gh-proxy.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.com] 提供'],
- //['https://sciproxy.com/github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [sciproxy.com] 提供'],
- //['https://ghproxy.cfd/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供'],
+ //['https://hub.gitmirror.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [GitMirror] 提供'], // 域名无解析
+ //['https://gh-proxy.org/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.com] 提供'],
+ //['https://cdn.gh-proxy.org/https://github.com', '其他', '[Fastly CDN] - 该公益加速源由 [gh-proxy.com] 提供'],
+ //['https://edgeone.gh-proxy.org/https://github.com', '其他', '[edgeone] - 该公益加速源由 [gh-proxy.com] 提供'],
+ //['https://ghproxy.it/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供'],
//['https://github.site', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], // 挂了
//['https://github.store', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], // 挂了
//['https://gh.jiasu.in/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@0-RTT] 提供'], // 404
//['https://github.boki.moe/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [blog.boki.moe] 提供'],
+ //['https://raw.ihtw.moe/github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [raw.ihtw.moe] 提供'],
+ //['https://xget.xi-xu.me/gh', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.com/xixu-me/Xget] 提供'],
//['https://dgithub.xyz', '美国', '[美国 西雅图] - 该公益加速源由 [dgithub.xyz] 提供'],
- //['https://gh-proxy.ygxz.in/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@一个小站 www.ygxz.in] 提供'],
+ //['https://gh-proxy.ygxz.in/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@一个小站 www.ygxz.in] 提供'], // 被蔷
//['https://hub.scholar.rr.nu', '美国', '[美国 纽约] - 该公益加速源由 [FastGit 群组成员] 提供'], // 证书到期
- //['https://hub.whtrys.space', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [FastGit 群组成员] 提供'],
], clone_ssh_url = [
['ssh://git@ssh.github.com:443/', 'Github 原生', '[日本、新加坡等] - Github 官方提供的 443 端口的 SSH(依然是 SSH 协议),适用于限制访问 22 端口的网络环境'],
//['git@ssh.fastgit.org:', '香港', '[中国 香港] - 该公益加速源由 [FastGit] 提供'], // 挂了
@@ -142,40 +145,47 @@
['https://raw.kkgithub.com', '香港 1', '[中国香港、日本、新加坡等] - 该公益加速源由 [help.kkgithub.com] 提供
- 缓存:有'],
//['https://jsd.proxy.aks.moe/gh', '香港 2', '[中国 香港] - 该公益加速源由 [cdn.akass.cn] 提供'], // 证书错误
['https://wget.la/https://raw.githubusercontent.com', '香港 2', '[中国香港、中国台湾、日本、美国等](CDN 不固定) - 该公益加速源由 [ucdn.me] 提供
- 缓存:无(或很短)'],
+ ['https://hk.gh-proxy.org/https://raw.githubusercontent.com', '香港 3', '[中国香港] - 该公益加速源由 [gh-proxy.com] 提供
- 缓存:有(官方注明 2 小时)'],
+ ['https://hub.glowp.xyz/https://raw.githubusercontent.com', '香港 4', '[中国香港] - 该公益加速源由 [hub.glowp.xyz] 提供
- 缓存:有'],
//['https://cdn.wget.la/gh', '香港 2', '[中国香港、中国台湾、日本、美国等](CDN 不固定) - 该公益加速源由 [ucdn.me] 提供
- 缓存:无(或很短)'],
- //['https://gitproxy.click/https://raw.githubusercontent.com', '香港', '[中国 香港] - 该公益加速源由 [gitproxy.click] 提供'],
- //['https://cdn.moran233.xyz/https://raw.githubusercontent.com', '香港', '[中国 香港] - 该公益加速源由 [cdn.moran233.xyz] 提供'],
+ //['https://gitproxy.click/https://raw.githubusercontent.com', '香港', '[中国 香港] - 该公益加速源由 [gitproxy.click] 提供'], // 输出错误
+ //['https://cdn.moran233.xyz/https://raw.githubusercontent.com', '香港', '[中国 香港] - 该公益加速源由 [cdn.moran233.xyz] 提供'], // 404
//['https://gitdl.cn/https://raw.githubusercontent.com', '香港 3', '[中国香港] - 该公益加速源由 [gitdl] 提供
- 缓存:有'], // 输出文件错误
['https://ghfast.top/https://raw.githubusercontent.com', '韩国', '[日本、韩国、新加坡、美国、德国等](CDN 不固定) - 该公益加速源由 [ghproxy.link] 提供
- 缓存:无(或很短)'],
- ['https://gh.catmak.name/https://github.com', '韩国', '[韩国 首尔] - 该公益加速源由 [gh.catmak.name] 提供'],
- ['https://ghproxy.net/https://raw.githubusercontent.com', '日本 1', '[日本 大阪] - 该公益加速源由 [ghproxy.net] 提供
- 缓存:有(约 10 分钟)'],
- ['https://fastly.jsdelivr.net/gh', '日本 2', '[日本 东京] - 该公益加速源由 [JSDelivr CDN] 提供
- 缓存:有
- 不支持大小超过 50 MB 的文件
- 不支持版本号格式的分支名(如 v1.2.3)'],
- ['https://jsdelivr.pai233.top/gh', '日本 3', '[日本 东京](Vercel Anycast) - 该公益加速源由 [blog.pai233.top] 提供
- 缓存:有'],
- //['https://proxy.yaoyaoling.net/https://raw.githubusercontent.com', '日本', '[日本 东京] - 该公益加速源由 [proxy.yaoyaoling.net] 提供'],
- //['https://g.blfrp.cn/https://raw.githubusercontent.com', '日本', '[日本 东京] - 该公益加速源由 [g.blfrp.cn] 提供'],
+ ['https://gh.catmak.name/https://raw.githubusercontent.com', '韩国', '[韩国 首尔] - 该公益加速源由 [gh.catmak.name] 提供'],
+ //['https://ghproxy.net/https://raw.githubusercontent.com', '日本 1', '[日本 大阪] - 该公益加速源由 [ghproxy.net] 提供
- 缓存:有(约 10 分钟)'], // 挂了
+ ['https://fastly.jsdelivr.net/gh', '日本 1', '[日本 东京] - 该公益加速源由 [JSDelivr CDN] 提供
- 缓存:有
- 不支持大小超过 50 MB 的文件
- 不支持版本号格式的分支名(如 v1.2.3)'],
+ ['https://cdn.gh-proxy.org/https://raw.githubusercontent.com', '日本 2', '[Fastly CDN] - 该公益加速源由 [gh-proxy.com] 提供
- 缓存:有'],
+ //['https://jsdelivr.pai233.top/gh', '日本 3', '[日本 东京](Vercel Anycast) - 该公益加速源由 [blog.pai233.top] 提供
- 缓存:有'], // This deployment is temporarily paused
+ //['https://proxy.yaoyaoling.net/https://raw.githubusercontent.com', '日本', '[日本 东京] - 该公益加速源由 [proxy.yaoyaoling.net] 提供'], // 空白
+ ['https://g.blfrp.cn/https://raw.githubusercontent.com', '日本 3', '[日本 东京] - 该公益加速源由 [g.blfrp.cn] 提供'],
['https://github.3x25.com/https://raw.githubusercontent.com', '新加坡', '[新加坡] - 该公益加速源由 [github.3x25.com] 提供'],
- //['https://raw.ixnic.net', '日本 4', '[日本 东京] - 该公益加速源由 [@黃埔興國] 提供
- 缓存:无(或很短)'], // 解析空
+ //['https://raw.bgithub.xyz', '荷兰', '[荷兰] - 该公益加速源由 [bgithub.xyz] 提供
- 缓存:有'],
//['https://gcore.jsdelivr.net/gh', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [JSDelivr CDN] 提供
- 缓存:有
- 不支持大小超过 50 MB 的文件
- 不支持版本号格式的分支名(如 v1.2.3)'], // 变成 美国 Cloudflare CDN 了
//['https://jsdelivr.b-cdn.net/gh', '其他', '[中国香港、中国台湾、日本、新加坡等](CDN 不固定) - 该公益加速源由 [@rttwyjz] 提供
- 缓存:有'], // 疑似 SNI 阻断
+ //['https://xget.xi-xu.me/gh', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.com/xixu-me/Xget] 提供'],
//['https://ghproxy.1888866.xyz/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [WJQSERVER-STUDIO/ghproxy] 提供'],
- //['https://github.moeyy.xyz/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供
- 缓存:有(约 10 分钟)'],
+ //['https://github.moeyy.xyz/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供
- 缓存:有(约 10 分钟)'], // 墙了
//['https://gh-proxy.net/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.net] 提供'],
+ //['https://rapidgit.jjda.de5.net/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [热心网友] 提供'],
//['https://github.yongyong.online/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.yongyong.online] 提供'],
//['https://ghdd.862510.xyz/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghdd.862510.xyz] 提供'],
//['https://raw.cachefly.998111.xyz', '其他 4', '[新加坡、日本、印度等](Anycast CDN 不固定) - 该公益加速源由 [@XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0] 提供
- 缓存:有(约 12 小时)'], // 证书到期
- //['https://ghproxy.cfd/https://raw.githubusercontent.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供
- 缓存:无(或很短)'],
+ //['https://ghproxy.it/https://raw.githubusercontent.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供
- 缓存:无(或很短)'],
//['https://raw.github.site', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供
- 缓存:无(或很短)'], // 挂了
//['https://raw.github.store', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供
- 缓存:无(或很短)'], // 挂了
//['https://gh.jiasu.in/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@0-RTT] 提供'], // 404
//['https://github.boki.moe/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [blog.boki.moe] 提供
- 缓存:无(或很短)'],
- //['https://gh-proxy.com/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.com] 提供
- 缓存:有'],
+ //['https://gh-proxy.org/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.com] 提供
- 缓存:有'],
+ //['https://cdn.gh-proxy.org/https://raw.githubusercontent.com', '其他', '[Fastly CDN] - 该公益加速源由 [gh-proxy.com] 提供'],
+ //['https://edgeone.gh-proxy.org/https://raw.githubusercontent.com', '其他', '[edgeone] - 该公益加速源由 [gh-proxy.com] 提供'],
//['https://cdn.githubraw.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [githubraw.com] 提供
- 缓存:有(几乎永久)'],
//['https://raw.dgithub.xyz', '美国', '[美国 西雅图] - 该公益加速源由 [dgithub.xyz] 提供
- 缓存:无(或很短)'],
- //['https://gh-proxy.ygxz.in//https://raw.githubusercontent.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@一个小站 www.ygxz.in] 提供
- 缓存:无(或很短)'],
+ //['https://gh-proxy.ygxz.in//https://raw.githubusercontent.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@一个小站 www.ygxz.in] 提供
- 缓存:无(或很短)'], // 被蔷
//['https://raw.nuaa.cf', '美国', '[美国 洛杉矶] - 该公益加速源由 [FastGit 群组成员] 提供'], // 证书到期
//['https://raw.yzuu.cf', '美国', '[美国 纽约] - 该公益加速源由 [FastGit 群组成员] 提供'], // 证书到期
- //['https://raw.gitmirror.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [GitMirror] 提供
- 缓存:无(或很短)'],
- //['https://jsdelivr-cdn.prpservice.990989.xyz/gh', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [PencilNavigator] 提供
- 缓存:有'],
+ //['https://hub.gitmirror.com/raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [GitMirror] 提供
- 缓存:无(或很短)'], // 域名无解析
+ //['https://jsdelivr-cdn.pencilnavrp.990989.xyz/gh', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [PencilNavigator] 提供
- 缓存:有'],
//['https://git.yumenaka.net/https://raw.githubusercontent.com', '美国', '[美国 圣何塞]'], // 连接超时
], svg = [
''
@@ -184,16 +194,36 @@
if (menu_rawFast == null){menu_rawFast = 1; GM_setValue('xiu2_menu_raw_fast', 1)};
if (GM_getValue('menu_rawDownLink') == null){GM_setValue('menu_rawDownLink', true)};
if (GM_getValue('menu_gitClone') == null){GM_setValue('menu_gitClone', true)};
+ // 如果自定义加速源不存在或为空则忽略,如果自定义加速源地址存在,则添加到 raw_url、clone_url 数组中
+ if (GM_getValue('custom_raw_url')) {raw_url.splice(1, 0, [GM_getValue('custom_raw_url'), '自定义', '[由你自定义的 Raw 加速源]
提示:点击浏览器右上角 Tampermonkey 扩展图标 - [ #️⃣ 自定义加速源 ]
即可轮流设置 Raw、Git Clone、Release/Code(ZIP) 的自定义加速源地址(留空代表不设置)。'])};
+ if (GM_getValue('custom_clone_url')) {clone_url.unshift([GM_getValue('custom_clone_url'), '自定义', '[由你自定义的 Git Clone 加速源]
提示:点击浏览器右上角 Tampermonkey 扩展图标 - [ #️⃣ 自定义加速源 ]
即可轮流设置 Raw、Git Clone、Release/Code(ZIP) 的自定义加速源地址(留空代表不设置)。'])};
registerMenuCommand();
// 注册脚本菜单
function registerMenuCommand() {
// 如果反馈菜单ID不是 null,则删除所有脚本菜单
- if (menu_feedBack_ID) {GM_unregisterMenuCommand(menu_rawFast_ID); GM_unregisterMenuCommand(menu_rawDownLink_ID); GM_unregisterMenuCommand(menu_gitClone_ID); GM_unregisterMenuCommand(menu_feedBack_ID); menu_rawFast = GM_getValue('xiu2_menu_raw_fast');}
+ if (menu_feedBack_ID) {GM_unregisterMenuCommand(menu_rawFast_ID); GM_unregisterMenuCommand(menu_rawDownLink_ID); GM_unregisterMenuCommand(menu_gitClone_ID); GM_unregisterMenuCommand(menu_customUrl_ID); GM_unregisterMenuCommand(menu_feedBack_ID); menu_rawFast = GM_getValue('xiu2_menu_raw_fast');}
// 避免在减少 raw 数组后,用户储存的数据大于数组而报错
if (menu_rawFast > raw_url.length - 1) menu_rawFast = 0
if (GM_getValue('menu_rawDownLink')) menu_rawFast_ID = GM_registerMenuCommand(`${['0️⃣','1️⃣','2️⃣','3️⃣','4️⃣','5️⃣','6️⃣','7️⃣','8️⃣','9️⃣','🔟'][menu_rawFast]} [ ${raw_url[menu_rawFast][1]} ] 加速源 (☁) - 点击切换`, menu_toggle_raw_fast);
menu_rawDownLink_ID = GM_registerMenuCommand(`${GM_getValue('menu_rawDownLink')?'✅':'❌'} 项目列表单文件快捷下载 (☁)`, function(){if (GM_getValue('menu_rawDownLink') == true) {GM_setValue('menu_rawDownLink', false); GM_notification({text: `已关闭 [项目列表单文件快捷下载 (☁)] 功能\n(点击刷新网页后生效)`, timeout: 3500, onclick: function(){location.reload();}});} else {GM_setValue('menu_rawDownLink', true); GM_notification({text: `已开启 [项目列表单文件快捷下载 (☁)] 功能\n(点击刷新网页后生效)`, timeout: 3500, onclick: function(){location.reload();}});}registerMenuCommand();});
menu_gitClone_ID = GM_registerMenuCommand(`${GM_getValue('menu_gitClone')?'✅':'❌'} 添加 git clone 命令`, function(){if (GM_getValue('menu_gitClone') == true) {GM_setValue('menu_gitClone', false); GM_notification({text: `已关闭 [添加 git clone 命令] 功能\n(点击刷新网页后生效)`, timeout: 3500, onclick: function(){location.reload();}});} else {GM_setValue('menu_gitClone', true); GM_notification({text: `已开启 [添加 git clone 命令] 功能\n(点击刷新网页后生效)`, timeout: 3500, onclick: function(){location.reload();}});}registerMenuCommand();});
+ menu_customUrl_ID = GM_registerMenuCommand(`#️⃣ 自定义加速源`, function () {
+ // 定义三种自定义加速源的键名和描述
+ const customKeys = [
+ { key: 'custom_raw_url', desc: 'Raw 加速源', placeholder: 'https://example.com/https://raw.githubusercontent.com' },
+ { key: 'custom_clone_url', desc: 'Git Clone 加速源', placeholder: 'https://example.com/https://github.com' },
+ { key: 'custom_download_url', desc: 'Release/Code(ZIP) 加速源', placeholder: 'https://example.com/https://github.com' }
+ ];
+ // 递归弹出输入框
+ function promptCustomUrl(index = 0) {
+ if (index >= customKeys.length) {GM_notification({ text: '自定义加速源设置已完成!\n(点击刷新网页后生效)', timeout: 3500, onclick: function () { location.reload(); } });return;}
+ const { key, desc, placeholder } = customKeys[index];
+ let current = GM_getValue(key, '');
+ let input = prompt(`请输入自定义${desc}地址:\n- 当前:\n${current || '(未设置)'}\n\n- 示例:\n${placeholder}\n\n- 留空为不设置\n- 点击 [确定] 保存 并 继续设置下一个\n- 点击 [取消] 不保存 并 终止后续设置`,current);
+ if (input !== null) {GM_setValue(key, input.trim());promptCustomUrl(index + 1);}// 如果用户点击 取消 按钮,则不再继续弹出
+ }
+ promptCustomUrl();
+ });
menu_feedBack_ID = GM_registerMenuCommand('💬 反馈 & 建议 [Github]', function () {window.GM_openInTab('https://github.com/XIU2/UserScript', {active: true,insert: true,setParent: true});window.GM_openInTab('https://greasyfork.org/zh-CN/scripts/412245/feedback', {active: true,insert: true,setParent: true});});
}
@@ -260,9 +290,13 @@
// download_url 随机几个美国加速源
function get_New_download_url() {
//return download_url_us // 全输出调试用
- let shuffled = download_url_us.slice(0), i = download_url_us.length, min = i - 6, temp, index;
+ let minnum = 6; // 随机输出几个美国加速源
+ if (GM_getValue('custom_download_url')) {minnum = 5;} // 如果有自定义加速源,则只随机输出 5 个美国加速源
+ let shuffled = download_url_us.slice(0), i = download_url_us.length, min = i - minnum, temp, index;
while (i-- > min) {index = Math.floor((i + 1) * Math.random()); temp = shuffled[index]; shuffled[index] = shuffled[i]; shuffled[i] = temp;}
- return shuffled.slice(min)//.concat(download_url); // 随机洗牌 download_url_us 数组并取前几个,然后将其合并至 download_url 数组
+ // 如果有自定义加速源,则将其添加到随机数组的开头
+ if (GM_getValue('custom_download_url')) {return [[GM_getValue('custom_download_url'), '自定义', '[由你自定义的 Release/Code(ZIP) 加速源地址]
提示:点击浏览器右上角 Tampermonkey 扩展图标 - [ #️⃣ 自定义加速源 ]
即可轮流设置 Raw、Git Clone、Release/Code(ZIP) 的自定义加速源地址(留空代表不设置)。']].concat(shuffled.slice(min));}
+ return shuffled.slice(min) // 随机洗牌 download_url_us 数组并取前几个,然后将其合并至 download_url 数组
// 为了缓解非美国公益节点压力(考虑到很多人无视前面随机的美国节点),干脆也将其加入随机
}
@@ -271,6 +305,7 @@
let html = document.querySelectorAll('.Box-footer'); if (html.length == 0 || location.pathname.indexOf('/releases') == -1) return
let divDisplay = 'margin-left: -90px;', new_download_url = get_New_download_url();
if (document.documentElement.clientWidth > 755) {divDisplay = 'margin-top: -3px;margin-left: 8px;display: inherit;';}; // 调整小屏幕时的样式
+ html[0].appendChild(document.createElement('style')).textContent = '@media (min-width: 768px) {.Box-footer li.Box-row>div>span.color-fg-muted {min-width: 27px !important;}}';
for (const current of html) {
if (current.querySelector('.XIU2-RS')) continue
current.querySelectorAll('li.Box-row a').forEach(function (_this) {
@@ -283,7 +318,7 @@
} else {
url = new_download_url[i][0] + href[1]
}
- _html += `${new_download_url[i][1]}`
+ _html += `${new_download_url[i][1]}`
}
_this.parentElement.nextElementSibling.insertAdjacentHTML('beforeend', _html + '');
});
@@ -313,7 +348,9 @@
url = new_download_url[i][0] + href
}
html_clone_a.href = url
- html_clone_a.setAttribute('title', new_download_url[i][2].replaceAll('
','\n'))
+ html_clone_a.setAttribute('title', new_download_url[i][2].replaceAll('
','\n') + '\n\n提示:如果不想要点击链接在前台打开空白新标签页(一闪而过影响体验),\n可以 [鼠标中键] 或 [Ctrl+鼠标左键] 点击加速链接即可在后台打开新标签页!');
+ html_clone_a.setAttribute('target', '_blank');
+ html_clone_a.setAttribute('rel', 'noreferrer noopener nofollow');
html_clone_span.textContent = 'Download ZIP ' + new_download_url[i][1]
_html += html_clone.outerHTML
}
@@ -396,7 +433,7 @@
} else {
url = raw_url[i][0] + href2;
}
- _html += `${raw_url[i][1].replace(/ \d/,'')}`
+ _html += `${raw_url[i][1].replace(/ \d/,'')}`
}
if (document.querySelector('.XIU2-RF')) document.querySelectorAll('.XIU2-RF').forEach((e)=>{e.remove()})
html.insertAdjacentHTML('afterend', _html);
@@ -441,7 +478,7 @@
url = raw_url[menu_rawFast][0] + href2;
}
- fileElm.insertAdjacentHTML('afterend', `${svg[0]}`);
+ fileElm.insertAdjacentHTML('afterend', `${svg[0]}`);
// 绑定鼠标事件
trElm.onmouseover = mouseOverHandler;
trElm.onmouseout = mouseOutHandler;
@@ -537,4 +574,4 @@
window.dispatchEvent(new Event('urlchange'))
});
}
-})();
+})();
\ No newline at end of file
diff --git a/HTML5Volume.user.js b/HTML5Volume.user.js
index 6bcc4388e..1938bca0f 100644
--- a/HTML5Volume.user.js
+++ b/HTML5Volume.user.js
@@ -3,7 +3,7 @@
// @name:zh-CN HTML5 视频音频默认音量
// @name:zh-TW HTML5 視訊音訊預設音量
// @name:ru Громкость аудио-видео в формате HTML5 по умолчанию
-// @version 1.0.3
+// @version 1.0.5
// @author X.I.U
// @description Avoid being startled by some video/audio with default 100% volume! And support each website to remember the volume separately...
// @description:zh-CN 避免被一些默认 100% 音量的视频/音频吓一跳(或社死)!且支持各网站分别记住音量...
@@ -34,12 +34,58 @@
let nowVolume = ' (跟随全局)'
if (localStorage.getItem('html5_xiu_currentVolume')) nowVolume = ' [ ' + parseInt(localStorage.getItem('html5_xiu_currentVolume')) + '% ]'
menu_ID[1] = GM_registerMenuCommand('🔁 忘记当前网站音量' + nowVolume, function(){resetCurrentVolume()});
- menu_ID[2] = GM_registerMenuCommand('💬 反馈 & 建议', function () {GM_openInTab('https://github.com/XIU2/UserScript#xiu2userscript', {active: true,insert: true,setParent: true}); GM_openInTab('https://greasyfork.org/zh-CN/scripts/438400/feedback', {active: true,insert: true,setParent: true});});
+ // 强制当前网站使用全局音量(针对部分不支持调节音量的网站)
+ if (menu_forcedToEnable('check')) { // 当前网站是否已存在强制列表中
+ menu_ID[2] = GM_registerMenuCommand('✅ 已强制当前网站使用全局音量 (针对不支持调节音量的)', function(){menu_forcedToEnable('del')});
+ menu_ID[4] = GM_registerMenuCommand('#️⃣ 修改当前网站默认音量 (针对不支持调节音量的)', function(){customCurrentDefaultVolume()});
+ } else {
+ menu_ID[2] = GM_registerMenuCommand('❌ 未强制当前网站使用全局音量 (针对不支持调节音量的)', function(){menu_forcedToEnable('add')});
+ }
+ menu_ID[3] = GM_registerMenuCommand('💬 反馈 & 建议', function () {GM_openInTab('https://github.com/XIU2/UserScript#xiu2userscript', {active: true,insert: true,setParent: true}); GM_openInTab('https://greasyfork.org/zh-CN/scripts/438400/feedback', {active: true,insert: true,setParent: true});});
}
insPage();
currentPage();
+ // 强制当前网站使用全局音量(针对部分不支持调节音量的网站)
+ function menu_forcedToEnable(type) {
+ switch(type) {
+ case 'check':
+ if(check()) return true
+ return false
+ break;
+ case 'add':
+ add();
+ break;
+ case 'del':
+ del();
+ break;
+ }
+
+ function check() { // 存在返回真,不存在返回假
+ let websiteList = GM_getValue('menu_forcedToEnable',[]); // 读取网站列表
+ if (websiteList.indexOf(location.host) === -1) return false // 不存在返回假
+ return true
+ }
+
+ function add() {
+ if (check()) return
+ let websiteList = GM_getValue('menu_forcedToEnable',[]); // 读取网站列表
+ websiteList.push(location.host); // 追加网站域名
+ GM_setValue('menu_forcedToEnable', websiteList); // 写入配置
+ location.reload(); // 刷新网页
+ }
+
+ function del() {
+ if (!check()) return
+ let websiteList = GM_getValue('menu_forcedToEnable',[]), // 读取网站列表
+ index = websiteList.indexOf(location.host);
+ websiteList.splice(index, 1); // 删除网站域名
+ GM_setValue('menu_forcedToEnable', websiteList); // 写入配置
+ location.reload(); // 刷新网页
+ }
+ }
+
// 网页本身的 Video Audio 标签
function currentPage() {
@@ -88,12 +134,16 @@
// 判断该视频/音频元素是否已监听事件
function isFirstEvent(target) {
- if (!target.controls) return; // 如果视频/音频已经有了自己的控件(即没有使用 HTML5 默认的控件),则退出
+ if (!menu_forcedToEnable('check')) { // 如果未强制当前网站使用全局音量(针对部分不支持调节音量的网站)
+ if (!target.controls) return; // 如果视频/音频已经有了自己的控件(即没有使用 HTML5 默认的控件),则退出
+ }
modifyVolume(target);
- // 如果没有该属性,则代表是还未监听事件
- if (target.dataset.html5VolumeXiu != 'true') {
- target.dataset.html5VolumeXiu = 'true'
- target.addEventListener('volumechange', volumeChangeEvent);
+ if (!menu_forcedToEnable('check')) { // 如果未强制当前网站使用全局音量(针对部分不支持调节音量的网站),毕竟不支持音量调节的网站监听音量变化是没有意义的,反而可能会被网站默认静音什么的搞乱
+ // 如果没有该属性,则代表是还未监听事件
+ if (target.dataset.html5VolumeXiu != 'true') {
+ target.dataset.html5VolumeXiu = 'true'
+ target.addEventListener('volumechange', volumeChangeEvent);
+ }
}
}
@@ -111,8 +161,18 @@
// 修改全局默认音量
function customDefaultVolume() {
- let newValue = parseFloat(prompt('修改全局默认音量,不影响各网站记住的音量,当前网页需刷新后生效~\n范围:0~100 (即 0%~100%,不需要加 % 百分号)\n默认:30', GM_getValue('menu_defaultVolume', 30)));
+ let newValue = parseFloat(prompt('修改全局默认音量,不影响各网站记住的音量,修改后当前网页立即生效~\n范围:0~100 (即 0%~100%,不需要加 % 百分号)\n默认:30', GM_getValue('menu_defaultVolume', 30)));
if (!Number.isNaN(newValue) && newValue >= 0 && newValue <= 100) {GM_setValue('menu_defaultVolume', newValue);}
+ currentPage(); // 重置当前网页的音量
+ registerMenuCommand(); // 重新注册菜单(刷新菜单上的音量值)
+ }
+
+
+ // 修改当前网站默认音量 (针对不支持调节音量的网站)
+ function customCurrentDefaultVolume() {
+ let newValue = parseFloat(prompt('修改当前网站默认音量 (针对不支持调节音量的网站),修改后立即生效~\n范围:0~100 (即 0%~100%,不需要加 % 百分号)\n默认:全局默认音量', localStorage.getItem('html5_xiu_currentVolume') || GM_getValue('menu_defaultVolume', 30)));
+ if (!Number.isNaN(newValue) && newValue >= 0 && newValue <= 100) {localStorage.setItem('html5_xiu_currentVolume', newValue);}
+ currentPage(); // 重置当前网页的音量
registerMenuCommand(); // 重新注册菜单(刷新菜单上的音量值)
}
@@ -121,5 +181,6 @@
function resetCurrentVolume() {
if (localStorage.getItem('html5_xiu_currentVolume')) localStorage.removeItem('html5_xiu_currentVolume') // 清理 localStorage
currentPage(); // 重置当前网页的音量
+ registerMenuCommand(); // 重新注册菜单(刷新菜单上的音量值)
}
})();
diff --git a/Hostloc-Enhanced.user.js b/Hostloc-Enhanced.user.js
index 4ab680d1c..2a8b2aaca 100644
--- a/Hostloc-Enhanced.user.js
+++ b/Hostloc-Enhanced.user.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 全球主机交流论坛增强
-// @version 1.4.9
+// @version 1.5.2
// @author X.I.U
// @description 自动签到(访问空间 +22 积分)、屏蔽用户(黑名单)、屏蔽关键词(帖子标题)、回帖小尾巴、自动无缝翻页、快捷回到顶部(右键网页两侧空白处)、收起预览帖子(左键网页两侧空白处)、屏蔽投票贴、快速添加链接、屏蔽阅读权限 255 帖子、预览帖子快速回复带签名、显示是否在线、显示帖子内隐藏回复
// @match *://hostloc.com/*
@@ -20,8 +20,7 @@
// @supportURL https://github.com/XIU2/UserScript
// @homepageURL https://github.com/XIU2/UserScript
// ==/UserScript==
-
-(function() {
+(function () {
'use strict';
var menu_ALL = [
['menu_autoSignIn', '自动签到(22 积分)', '自动签到', true],
@@ -35,48 +34,45 @@
['menu_delate255', '屏蔽阅读权限 255 帖子', '屏蔽阅读权限 255 帖子', true],
['menu_delatePolls', '屏蔽投票帖子', '屏蔽投票帖子', false]
], menu_ID = [];
- for (let i=0;i menu_ALL.length){ // 如果菜单ID数组多于菜单数组,说明不是首次添加菜单,需要卸载所有脚本菜单
- for (let i=0;i menu_ALL.length) { // 如果菜单ID数组多于菜单数组,说明不是首次添加菜单,需要卸载所有脚本菜单
+ for (let i = 0; i < menu_ID.length; i++) {
GM_unregisterMenuCommand(menu_ID[i]);
}
}
- for (let i=0;i -1) { // 帖子内
if (menu_value('menu_thread_pageLoading')) {
@@ -161,6 +151,7 @@
showPosts(); // 自动显示帖子内被隐藏的回复
blockUsers('thread'); // 屏蔽用户(黑名单)
onlineStatus(); // 显示是否在线
+ addBlockButton(); // 添加屏蔽按钮
replyCustom('thread'); // 回复自定义
} else if (patt_forum.test(location.pathname) || location.search.indexOf('mod=forumdisplay') > -1) { // 各板块帖子列表
curSite = DBSite.forum;
@@ -172,28 +163,25 @@
vfastpostDOMNodeInserted(); // 监听插入事件(预览快速回复带签名)
replyCustom('forum'); // 回复自定义
if (patt_forum.test(location.pathname)) blockDOMNodeInserted(); //监听插入事件(有新的回复主题,点击查看)
- }else if (location.search.indexOf('mod=guide') > -1) { // 导读帖子列表
+ } else if (location.search.indexOf('mod=guide') > -1) { // 导读帖子列表
curSite = DBSite.guide;
- } else if(location.pathname === '/search.php') { // 搜索结果列表
+ } else if (location.pathname === '/search.php') { // 搜索结果列表
curSite = DBSite.search;
blockUsers('search'); // 屏蔽用户(黑名单)
- } else if(location.pathname === '/home.php' && location.search.indexOf('mod=space&do=notice&view=mypost') > -1) { // 消息(帖子/点评/提到)
+ } else if (location.pathname === '/home.php' && location.search.indexOf('mod=space&do=notice&view=mypost') > -1) { // 消息(帖子/点评/提到)
blockUsers('notice'); // 屏蔽用户(黑名单)
- } else if(location.pathname === '/home.php' && location.search.indexOf('mod=space&do=pm') > -1) { // 消息(私人聊天)
+ } else if (location.pathname === '/home.php' && location.search.indexOf('mod=space&do=pm') > -1) { // 消息(私人聊天)
blockUsers('pm'); // 屏蔽用户(黑名单)
- } else if(location.search.indexOf('mod=space') > -1 && location.search.indexOf('&view=me') > -1) { // 别人的主题/回复
+ } else if (location.search.indexOf('mod=space') > -1 && location.search.indexOf('&view=me') > -1) { // 别人的主题/回复
curSite = DBSite.youreply;
- } else if(location.pathname === '/forum.php' && location.search.indexOf('mod=post&action=reply') > -1 || location.pathname === '/forum.php' && location.search.indexOf('mod=post&action=newthread') > -1) { // 回复:高级回复
+ } else if (location.pathname === '/forum.php' && location.search.indexOf('mod=post&action=reply') > -1 || location.pathname === '/forum.php' && location.search.indexOf('mod=post&action=newthread') > -1) { // 回复:高级回复
replyCustom('reply'); // 回复自定义
}
-
curSite.pageUrl = ""; // 下一页URL
pageLoading(); // 自动翻页
- backToTop(); // 回到顶部(右键点击左右两侧空白处)
- if(menu_value('menu_autoSignIn')) autoSignIn(); // 自动签到(访问空间 10 次 = 20 积分)
+ backToTop(); // 回到顶部(右键点击左右两侧空白处)
+ if (menu_value('menu_autoSignIn')) autoSignIn(); // 自动签到(访问空间 10 次 = 20 积分)
//replyIntervalDOMNodeInserted(); // 监听插入事件(回帖间隔)
-
-
// 自动签到(访问空间 10 次 = 20 积分 + 当天首次访问论坛 2 积分)
function autoSignIn() {
if (!loginStatus) return
@@ -201,13 +189,13 @@
timeOld = GM_getValue('menu_signInTime');
if (!timeOld || timeOld != timeNow) { // 是新的一天
GM_setValue('menu_signInTime', timeNow); // 写入签到时间以供后续比较
- GM_notification({text: '请不要关闭/刷新本页!耐心等待 60 秒~\n在此期间可以在 "其他标签页" 浏览论坛!', timeout: 10000});
+ GM_notification({ text: '请不要关闭/刷新本页!耐心等待 60 秒~\n在此期间可以在 "其他标签页" 浏览论坛!', timeout: 10000 });
let url_list = [],
url = 0;
// 随机生成 12 个空间地址(2 个冗余)
- for(let i = 0;i < 12;i++){url_list[i] = "https://" + location.host + "/space-uid-" + Math.floor(Math.random()*(50000-10000+1)+10000) + ".html";}
+ for (let i = 0; i < 12; i++) { url_list[i] = "https://" + location.host + "/space-uid-" + Math.floor(Math.random() * (50000 - 10000 + 1) + 10000) + ".html"; }
// 每 5 秒访问一次(避免触发网站防御机制,而且还可以适当浏览论坛)
- let signIn = setInterval(function(){
+ let signIn = setInterval(function () {
GM_xmlhttpRequest({
url: url_list[url++],
method: 'GET',
@@ -217,25 +205,21 @@
if (url === 11) { // 次数够了就取消定时循环
clearInterval(signIn);
console.log('[全球主机交流论坛 增强] 签到完成!');
- GM_notification({text: '签到完成!积分 +22 ~', timeout: 3500});
+ GM_notification({ text: '签到完成!积分 +22 ~', timeout: 3500 });
}
}, 5000);
}
}
-
-
// 重新签到
function reAutoSignIn() {
GM_setValue('menu_signInTime', '1970/1/1'); // 设置为比当前日期更早
location.reload(); // 刷新网页
}
-
-
// 自定义屏蔽用户
function customBlockUsers() {
let nowBlockUsers = '';
- GM_getValue('menu_customBlockUsers').forEach(function(item){nowBlockUsers += '|' + item})
- let newBlockUsers = prompt('编辑 [自定义屏蔽用户],刷新网页后生效\n(不同用户名之间使用 "|" 分隔,\n(例如:用户A|用户B|用户C,如果只有一个就不需要 "|" 了。', nowBlockUsers.replace('|',''));
+ GM_getValue('menu_customBlockUsers').forEach(function (item) { nowBlockUsers += '|' + item })
+ let newBlockUsers = prompt('编辑 [自定义屏蔽用户],刷新网页后生效\n(不同用户名之间使用 "|" 分隔,\n(例如:用户A|用户B|用户C,如果只有一个就不需要 "|" 了。', nowBlockUsers.replace('|', ''));
if (newBlockUsers === '') {
GM_setValue('menu_customBlockUsers', []);
registerMenuCommand(); // 重新注册脚本菜单
@@ -244,12 +228,10 @@
registerMenuCommand(); // 重新注册脚本菜单
}
};
-
-
// 屏蔽用户
function blockUsers(type) {
if (!menu_value('menu_customBlockUsers') || menu_value('menu_customBlockUsers').length < 1) return
- switch(type) {
+ switch (type) {
case 'thread': // 帖子内
blockUsers_('[id^="post_"]', 'a[href^="space-uid"]');
blockUsers_('[id^="comment_"] > div', 'a.xi2.xw1'); // 点评
@@ -269,10 +251,9 @@
blockUsers_('dl[id^="pmlist_"]', '.ptm.pm_c a[href^="space-uid"]');
break;
}
-
function blockUsers_(list1, list2, type) {
- document.querySelectorAll(list1).forEach(function(item){ // 遍历所有帖子
- menu_value('menu_customBlockUsers').forEach(function(item1){ // 遍历用户黑名单
+ document.querySelectorAll(list1).forEach(function (item) { // 遍历所有帖子
+ menu_value('menu_customBlockUsers').forEach(function (item1) { // 遍历用户黑名单
let itemName = item.querySelector(list2); // 寻找用户名
if (itemName) {
if (type && type === 1 && itemName.textContent.split(' ')[0] === item1) { // 回复引用
@@ -286,12 +267,11 @@
})
})
}
-
function blockUsers_vfastpost() {
let vfastpost = e => {
if (e.target.nodeType == 1 && e.target.outerHTML && e.target.outerHTML.indexOf('class="fastpreview"') > -1) {
- e.target.querySelectorAll('.bm_c > [id^="post_"]').forEach(function(item){ // 遍历所有回复
- menu_value('menu_customBlockUsers').forEach(function(item1){ // 遍历用户黑名单
+ e.target.querySelectorAll('.bm_c > [id^="post_"]').forEach(function (item) { // 遍历所有回复
+ menu_value('menu_customBlockUsers').forEach(function (item1) { // 遍历用户黑名单
let itemName = item.querySelector('a.xi2'); // 寻找用户名
if (itemName && itemName.textContent === item1) {
console.log(`屏蔽用户:${item1}`);
@@ -309,13 +289,11 @@
document.addEventListener('DOMNodeInserted', vfastpost); // 监听插入事件
}
}
-
-
// 自定义屏蔽关键词(帖子标题)
function customBlockKeywords() {
let nowBlockKeywords = '';
- GM_getValue('menu_customBlockKeywords').forEach(function(item){nowBlockKeywords += '|' + item})
- let newBlockKeywords = prompt('编辑 [自定义屏蔽关键词],刷新网页后生效\n(不同关键词之间使用 "|" 分隔,\n(例如:助力|互助|互点,如果只有一个就不需要 "|" 了。', nowBlockKeywords.replace('|',''));
+ GM_getValue('menu_customBlockKeywords').forEach(function (item) { nowBlockKeywords += '|' + item })
+ let newBlockKeywords = prompt('编辑 [自定义屏蔽关键词],刷新网页后生效\n(不同关键词之间使用 "|" 分隔,\n(例如:助力|互助|互点,如果只有一个就不需要 "|" 了。', nowBlockKeywords.replace('|', ''));
if (newBlockKeywords === '') {
GM_setValue('menu_customBlockKeywords', []);
registerMenuCommand(); // 重新注册脚本菜单
@@ -324,13 +302,11 @@
registerMenuCommand(); // 重新注册脚本菜单
}
};
-
-
// 屏蔽关键词(帖子标题)
function blockKeywords() {
if (!menu_value('menu_customBlockKeywords') || menu_value('menu_customBlockKeywords').length < 1) return
- document.querySelectorAll('[id^="normalthread_"]').forEach(function(item){ // 遍历所有帖子标题
- menu_value('menu_customBlockKeywords').forEach(function(item1){ // 遍历关键词
+ document.querySelectorAll('[id^="normalthread_"]').forEach(function (item) { // 遍历所有帖子标题
+ menu_value('menu_customBlockKeywords').forEach(function (item1) { // 遍历关键词
let itemName = item.querySelector('a.s.xst'); // 寻找帖子标题
if (itemName && itemName.textContent.toLowerCase().indexOf(item1.toLowerCase()) > -1) {
console.log(`屏蔽关键词:[${item1}]`, `,帖子标题:[${itemName.textContent}]`);
@@ -339,8 +315,6 @@
})
})
}
-
-
// 监听插入事件(有新的回复主题,点击查看)
function blockDOMNodeInserted() {
let block = e => {
@@ -353,8 +327,6 @@
}
document.addEventListener('DOMNodeInserted', block); // 监听插入事件
}
-
-
// 监听插入事件(预览快速回复带签名)
function vfastpostDOMNodeInserted() {
let vfastpost = e => {
@@ -364,8 +336,6 @@
}
document.addEventListener('DOMNodeInserted', vfastpost); // 监听插入事件
}
-
-
// 自定义小尾巴内容
function customLittleTail() {
let newLittleTail = prompt('编辑 [自定义小尾巴内容],刷新网页后生效(换行请使用 \\n\n提示①:记得在小尾巴前面加上几个 \\n 换行,用来分隔开回帖内容~\n提示②:建议使用 [align=right] 标签来使小尾巴居右~\n提示③:支持论坛富文本标签(建议先找个回复编辑预览好~\n示例:\\n\\n\\n\\n[align=right]第一行内容~\\n第二行内容~[/align]', GM_getValue('menu_customLittleTail'));
@@ -377,11 +347,9 @@
registerMenuCommand(); // 重新注册脚本菜单
}
};
-
-
// 回复自定义
function replyCustom(type) {
- switch(type) {
+ switch (type) {
case 'forum': // 各版块帖子列表的预览帖子
replyCustom_0(); // 预览帖子 快速回复(底部)
replyCustom_1(); // 预览帖子 回复(悬浮)
@@ -394,26 +362,24 @@
replyCustom_3();
break;
}
-
function replyCustom_0() {
let vfastpost = e => {
if (e.target.nodeType == 1 && e.target.innerHTML && e.target.innerHTML.indexOf('id="vfastpost"') > -1) {
let message = e.target.querySelector('input[name="message"]'), id = message.id.match(/\d+/g)[0];
message.parentNode.innerHTML = ``
- document.getElementById(`vreplysubmit_${id}`).onclick = function(){
+ document.getElementById(`vreplysubmit_${id}`).onclick = function () {
if (GM_getValue('menu_customLittleTail')) document.getElementById(`vmessage_${id}`).value += GM_getValue('menu_customLittleTail').replaceAll('\\n', '\n');
}
}
}
document.addEventListener('DOMNodeInserted', vfastpost); // 监听插入事件
}
-
function replyCustom_1() {
let floatlayout_reply = e => {
if (e.target.nodeType == 1 && e.target.innerHTML && e.target.innerHTML.indexOf('id="floatlayout_reply"') > -1) {
// 快速回复(悬浮)中添加 URL 按钮
document.querySelector('#floatlayout_reply .fbld').insertAdjacentHTML('afterend', `URL`);
- document.getElementById('postsubmit').onclick = function(){
+ document.getElementById('postsubmit').onclick = function () {
if (GM_getValue('menu_customLittleTail')) document.getElementById('postmessage').value += GM_getValue('menu_customLittleTail').replaceAll('\\n', '\n');
}
}
@@ -422,24 +388,20 @@
// 快速发帖(各版块帖子列表底部)中添加 URL 按钮
document.querySelector('#fastposteditor .fbld').insertAdjacentHTML('afterend', `URL`);
}
-
function replyCustom_2() { // 帖子底部的回复框
- document.getElementById('fastpostsubmit').onclick = function(){
+ document.getElementById('fastpostsubmit').onclick = function () {
if (GM_getValue('menu_customLittleTail')) document.getElementById('fastpostmessage').value += GM_getValue('menu_customLittleTail').replaceAll('\\n', '\n');
}
}
-
function replyCustom_3() {
let postsubmit = document.getElementById('postsubmit');
if (postsubmit && postsubmit.textContent === '\n参与/回复主题\n' || postsubmit && postsubmit.textContent === '\n发表帖子\n') {
- postsubmit.onclick = function(){
+ postsubmit.onclick = function () {
if (GM_getValue('menu_customLittleTail')) document.getElementById('e_textarea').value += GM_getValue('menu_customLittleTail').replaceAll('\\n', '\n');
}
}
}
}
-
-
// 监听插入事件(回帖间隔)
/*function replyIntervalDOMNodeInserted() {
let replyInterval = e => {
@@ -449,72 +411,113 @@
}
document.addEventListener('DOMNodeInserted', replyInterval); // 监听插入事件
}*/
-
-
// 自动显示帖子内被隐藏的回复
function showPosts() {
- if(menu_value('menu_showhide')){
+ if (menu_value('menu_showhide')) {
let showposts = document.querySelector('#hiddenpoststip a');
- if (showposts){ // 如果存在
+ if (showposts) { // 如果存在
showposts.click();
}
}
}
-
-
// 隐藏帖子内的 [下一页] 按钮
function hidePgbtn() {
document.lastChild.appendChild(document.createElement('style')).textContent = '.pgbtn {display: none;}';
}
-
-
// 快捷回到顶部(右键左右两侧空白处)
function backToTop() {
- document.body.oncontextmenu = function(event){
+ document.body.oncontextmenu = function (event) {
if (event.target == this) {
event.preventDefault();
- window.scrollTo(0,0)
+ window.scrollTo(0, 0)
}
}
}
-
-
// 收起帖子预览(左键左右两侧空白处)
function collapsedNowPost() {
- document.body.onclick = function(event){
+ document.body.onclick = function (event) {
if (event.target == this) {
document.querySelectorAll('[id^="threadPreviewTR_"] .closeprev').forEach(function (el) {
if (!el.parentElement.querySelector('[name="message"]') || el.parentElement.querySelector('[name="message"]').value === '' && !document.getElementById('fwin_reply')) { // 避免快速回复过程中误点收起了
let parentElement = el.parentElement.parentElement.parentElement.parentElement.parentElement,
top = parentElement.offsetTop + parentElement.offsetParent.offsetTop + parentElement.offsetParent.offsetParent.offsetTop; // 元素距离顶部的高度
- if (top < document.documentElement.scrollTop) window.scrollTo(0,top) // 帖子标题在上面时才会滚动到该帖子处
+ if (top < document.documentElement.scrollTop) window.scrollTo(0, top) // 帖子标题在上面时才会滚动到该帖子处
el.click()
}
});
}
}
}
-
-
// 显示在线状态
function onlineStatus() {
- document.querySelectorAll('[id^="favatar"]').forEach(function(item){ // 遍历所有帖子
+ document.querySelectorAll('[id^="favatar"]').forEach(function (item) { // 遍历所有帖子
if (item.querySelector('[id^="userinfo"] > .i.y em')) {
let icon = (item.querySelector('[id^="userinfo"] > .i.y em').textContent === '当前在线') ? '🌝' : '🌚';
let divStatus = document.createElement('div');
- divStatus.style = 'position: absolute;margin: -8px 0 0 8px;padding: 0 1px 1.2px;background-color: #ffffff;border-radius: 50%;';
+ divStatus.style = 'position: absolute;margin: -8px 0 0 8px;padding: 0px 1px;background-color: #ffffff;border-radius: 50%;z-index: 302;';
divStatus.textContent = icon;
let mochu = item.querySelector('.avatar');
- mochu.parentNode.insertBefore(divStatus,mochu);
+ mochu.parentNode.insertBefore(divStatus, mochu);
}
})
}
+ // 添加屏蔽按钮
+ function addBlockButton() {
+ document.querySelectorAll('[id^="favatar"]').forEach(function (item) { // 遍历所有帖子
+ let usernameLink = item.querySelector('a[href^="space-uid"]');
+ if (usernameLink) {
+ const username = usernameLink.textContent, avatar = item.querySelector('.avatar');
+ if (avatar && !avatar.parentNode.querySelector('.XIU-block-button')) {
+ // 创建屏蔽按钮
+ let blockButton = document.createElement('div');
+ blockButton.className = 'XIU-block-button';
+ blockButton.title = `屏蔽用户: ${username}`;
+ blockButton.textContent = '🚫';
+ blockButton.style.cssText = 'position: absolute;margin: -8px 0px 0px 8px;padding: 0px 0.5px;top: 0px;right: 10px;background-color: #F26C4F;border-radius: 50%;cursor: pointer;z-index: 302;box-shadow: 0 2px 4px rgba(0,0,0,0.2);transition: all 0.3s ease;';
+
+ // 鼠标悬停效果
+ if (!document.getElementById('XIU-block-style')) {
+ let blockStyle = document.createElement('style');
+ blockStyle.id = 'XIU-block-style';
+ document.documentElement.appendChild(blockStyle).textContent = '.XIU-block-button:hover{transform: scale(1.2);background-color: #ff6666;}'
+ }
+ // 点击事件
+ blockButton.addEventListener('click', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+
+ if (confirm(`确定要将用户 "${username}" 添加到黑名单吗?\n添加后该用户发布的任何内容都会被屏蔽`)) {
+ let blockList = GM_getValue('menu_customBlockUsers') || [];
+ if (!blockList.includes(username)) {
+ blockList.push(username);
+ GM_setValue('menu_customBlockUsers', blockList);
+ GM_notification({ text: `已将用户 "${username}" 添加到黑名单!\n刷新页面后生效。`, timeout: 3000 });
+
+ // 立即隐藏当前用户的帖子
+ let postElement = item.closest('[id^="post_"]');
+ if (postElement) {
+ postElement.style.opacity = '0.5';
+ postElement.style.transition = 'opacity 0.5s ease';
+ setTimeout(() => { postElement.hidden = true; }, 500);
+ }
+ } else {
+ GM_notification({ text: `用户 "${username}" 已在黑名单中!`, timeout: 2000 });
+ }
+ }
+ });
+ // 将按钮添加到头像旁边
+ avatar.parentNode.style.position = 'relative';
+ avatar.parentNode.appendChild(blockButton);
+ }
+ }
+ });
+ }
// 屏蔽阅读权限 255 的帖子
function delate255() {
if (!menu_value('menu_delate255')) return
- if (patt_forum.test(location.pathname) || location.search.indexOf('mod=forumdisplay') > -1){
+ if (patt_forum.test(location.pathname) || location.search.indexOf('mod=forumdisplay') > -1) {
document.querySelectorAll('tbody[id^="normalthread_"] .xw1').forEach(function (_this) {
if (_this.textContent === '255') {
_this.parentNode.parentNode.parentNode.hidden = true;
@@ -522,32 +525,28 @@
})
}
}
-
-
// 屏蔽投票贴
function delatePolls() {
if (!menu_value('menu_delatePolls')) return
- if (patt_forum.test(location.pathname) || location.search.indexOf('mod=forumdisplay') > -1){
+ if (patt_forum.test(location.pathname) || location.search.indexOf('mod=forumdisplay') > -1) {
document.querySelectorAll('tbody[id^="normalthread_"] .icn>a>img[alt="投票"]').forEach(function (_this) {
- _this.parentNode.parentNode.parentNode.parentNode.hidden = true;
+ _this.parentNode.parentNode.parentNode.parentNode.hidden = true;
})
}
}
-
-
// 自动翻页
function pageLoading() {
if (!menu_value('menu_pageLoading')) return
- if (curSite.SiteTypeID > 0){
+ if (curSite.SiteTypeID > 0) {
windowScroll(function (direction, e) {
if (direction === 'down') { // 下滑才准备翻页
let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
if (document.documentElement.scrollHeight <= document.documentElement.clientHeight + scrollTop + 999) {
if (curSite.SiteTypeID === SiteType.FORUM) { // 如果是各版块帖子列表则直接点下一页就行了
let autopbn = document.querySelector('#autopbn');
- if (autopbn && autopbn.textContent === "下一页 »"){ // 如果已经在加载中了,就忽略
+ if (autopbn && autopbn.textContent === "下一页 »") { // 如果已经在加载中了,就忽略
autopbn.click();
- let timer = setInterval(function(){ // 在下一页加载完成后
+ let timer = setInterval(function () { // 在下一页加载完成后
if (document.querySelector('#autopbn').textContent === '下一页 »') {
delate255(); // 屏蔽 255 权限帖子
delatePolls(); // 屏蔽投票贴子
@@ -565,12 +564,10 @@
});
}
}
-
-
// 滚动条事件
function windowScroll(fn1) {
var beforeScrollTop = document.documentElement.scrollTop,
- fn = fn1 || function () {};
+ fn = fn1 || function () { };
setTimeout(function () { // 延时执行,避免刚载入到页面就触发翻页事件
window.addEventListener('scroll', function (e) {
var afterScrollTop = document.documentElement.scrollTop,
@@ -581,31 +578,29 @@
}, false);
}, 1000)
}
-
-
// 修改自 https://greasyfork.org/scripts/14178 , https://github.com/machsix/Super-preloader
var ShowPager = {
getFullHref: function (e) {
- if (e != null && e.nodeType === 1 && e.href && e.href.slice(0,4) === 'http') return e.href;
+ if (e != null && e.nodeType === 1 && e.href && e.href.slice(0, 4) === 'http') return e.href;
return '';
},
createDocumentByString: function (e) {
if (e) {
if ('HTML' !== document.documentElement.nodeName) return (new DOMParser).parseFromString(e, 'application/xhtml+xml');
var t;
- try { t = (new DOMParser).parseFromString(e, 'text/html');} catch (e) {}
+ try { t = (new DOMParser).parseFromString(e, 'text/html'); } catch (e) { }
if (t) return t;
if (document.implementation.createHTMLDocument) {
t = document.implementation.createHTMLDocument('ADocument');
} else {
- try {((t = document.cloneNode(!1)).appendChild(t.importNode(document.documentElement, !1)), t.documentElement.appendChild(t.createElement('head')), t.documentElement.appendChild(t.createElement('body')));} catch (e) {}
+ try { ((t = document.cloneNode(!1)).appendChild(t.importNode(document.documentElement, !1)), t.documentElement.appendChild(t.createElement('head')), t.documentElement.appendChild(t.createElement('body'))); } catch (e) { }
}
if (t) {
var r = document.createRange(),
n = r.createContextualFragment(e);
r.selectNodeContents(document.body);
t.body.appendChild(n);
- for (var a, o = { TITLE: !0, META: !0, LINK: !0, STYLE: !0, BASE: !0}, i = t.body, s = i.childNodes, c = s.length - 1; c >= 0; c--) o[(a = s[c]).nodeName] && i.removeChild(a);
+ for (var a, o = { TITLE: !0, META: !0, LINK: !0, STYLE: !0, BASE: !0 }, i = t.body, s = i.childNodes, c = s.length - 1; c >= 0; c--) o[(a = s[c]).nodeName] && i.removeChild(a);
return t;
}
} else console.error('没有找到要转成 DOM 的字符串');
@@ -614,8 +609,8 @@
if (curSite.pager) {
let curPageEle = document.querySelector(curSite.pager.nextLink);
var url = this.getFullHref(curPageEle);
- if(url === '') return;
- if(curSite.pageUrl === url) return;// 不会重复加载相同的页面
+ if (url === '') return;
+ if (curSite.pageUrl === url) return;// 不会重复加载相同的页面
curSite.pageUrl = url;
// 读取下一页的数据
curSite.pager.startFilter && curSite.pager.startFilter();
@@ -632,9 +627,12 @@
let addTo = "beforeend";
if (curSite.pager.HT_insert[1] == 1) addTo = 'beforebegin';
// 插入新页面元素
- pageElems.forEach(function (one) {toElement.insertAdjacentElement(addTo, one);});
+ pageElems.forEach(function (one) { toElement.insertAdjacentElement(addTo, one); });
// 屏蔽用户(黑名单)
- if (patt_thread.test(location.pathname) || location.search.indexOf('mod=viewthread') > -1) {blockUsers('thread');} else if (location.pathname === '/search.php') {blockUsers('search');}
+ if (patt_thread.test(location.pathname) || location.search.indexOf('mod=viewthread') > -1) {
+ blockUsers('thread');
+ addBlockButton(); // 添加屏蔽按钮
+ } else if (location.pathname === '/search.php') { blockUsers('search'); }
delate255(); // 屏蔽 255 权限帖子
delatePolls(); // 屏蔽投票贴子
// 替换待替换元素
diff --git a/Lanzou-Enhanced.user.js b/Lanzou-Enhanced.user.js
index f0a30b9ef..ed8e63cd4 100644
--- a/Lanzou-Enhanced.user.js
+++ b/Lanzou-Enhanced.user.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 蓝奏云网盘增强
-// @version 1.5.6
+// @version 1.5.8
// @author X.I.U
// @description 文件排序、刷新不回根目录、快捷返回上一级(右键网页空白处)、后退返回上一级、右键文件显示菜单、点击直接下载文件、点击空白进入目录、自动显示更多文件、一键复制所有分享链接、自定义分享链接域名、自动打开/复制分享链接、带密码的分享链接自动输密码、拖入文件自动显示上传框、输入密码后回车确认、优化编辑框初始大小
// @match *://lanzou.com/u
@@ -52,6 +52,7 @@
// @match *://*.lanzj.com/*
// @match *://*.lanzl.com/*
// @match *://*.lanzm.com/*
+// @match *://*.lanzn.com/*
// @match *://*.lanzo.com/*
// @match *://*.lanzp.com/*
// @match *://*.lanzq.com/*
@@ -347,10 +348,10 @@
if (iframe) { // 只有找到 iframe 框架时才会继续运行脚本
iframe = iframe.contentWindow;
let timer = setInterval(function(){
- if (iframe.document.querySelector('.load>[href]')) {
- //iframe.document.querySelector('.load>a[href]').target = '_top'
- //iframe.document.querySelector('.load>a[href]').click();
- GM_openInTab(iframe.document.querySelector('.load>a[href]').href, {active: false, insert: true, setParent: false}); // 后台打开
+ if (iframe.document.querySelector('.load [href]')) {
+ //iframe.document.querySelector('.load a[href]').target = '_top'
+ //iframe.document.querySelector('.load a[href]').click();
+ GM_openInTab(iframe.document.querySelector('.load a[href]').href, {active: false, insert: true, setParent: false}); // 后台打开
clearInterval(timer);
// 关闭该后台标签页
if (GM_info.scriptHandler === 'Violentmonkey') { // Violentmonkey 需要延迟一会儿
diff --git a/README.md b/README.md
index 2aa0477e8..d59032f38 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@
## 脚本列表
-> _详细的**脚本介绍、使用说明、截图演示**等信息,请点击 **\[安装\]** 前往 GreasyFork 查看~_
+> _详细的**脚本介绍、使用说明、截图演示**等信息,请点击 **`[安装]`** 查看~(或去本项目 [Wiki](https://github.com/XIU2/UserScript/wiki) 查看_
| | 脚本名称 | 脚本功能 | 安装 \| 备用 |
| :----: | :---- | :---- | :----: |
@@ -33,7 +33,7 @@
| [
](https://www.52pojie.cn) | **吾爱破解论坛 美化** | 精简多余内容、样式优化 | **[安装](https://greasyfork.org/zh-CN/scripts/412681)** \| **[备用](https://bitbucket.org/xiu2/userscript/raw/master/52pojie-Beautification.user.js)** |
| [
](https://www.52pojie.cn) | **吾爱破解论坛 增强** | **自动签到**、自动无缝翻页、屏蔽导读悬赏贴 (最新发表页)... | **[安装](https://greasyfork.org/zh-CN/scripts/412680)** \| **[备用](https://bitbucket.org/xiu2/userscript/raw/master/52pojie-Enhanced.user.js)** |
| [
](https://hostloc.com) | **全球主机交流论坛 增强 \*** | **自动访问空间(22积分)、屏蔽用户**、屏蔽关键词、自动翻... | **[安装](https://greasyfork.org/zh-CN/scripts/414005)** \| **[备用](https://bitbucket.org/xiu2/userscript/raw/master/Hostloc-Enhanced.user.js)** |
-| [
](https://store.steampowered.com) | **Steam 创意工坊大图 修复** | 修复 Steam 创意工坊预览大图无法显示的问题 | **[安装](https://bitbucket.org/xiu2/userscript/raw/master/SteamWorkshopImageRepair.user.js)** \| **[备用](https://bitbucket.org/xiu2/userscript/raw/master/SteamWorkshopImageRepair.user.js)** |
+| [
](https://store.steampowered.com) | **Steam 创意工坊大图 修复** | 修复 Steam 创意工坊预览大图无法显示的问题 | **[安装](https://github.com/XIU2/UserScript/wiki/Steam-%E5%88%9B%E6%84%8F%E5%B7%A5%E5%9D%8A%E5%A4%A7%E5%9B%BE-%E4%BF%AE%E5%A4%8D)** \| **[备用](https://bitbucket.org/xiu2/userscript/raw/master/SteamWorkshopImageRepair.user.js)** |
| [
](https://github.com/XIU2) | **HTML5 视频音频默认音量** | 避免被 100% 音量**吓一跳**!且支持各网站分别记住音量... | **[安装](https://greasyfork.org/zh-CN/scripts/438400)** \| **[备用](https://bitbucket.org/xiu2/userscript/raw/master/HTML5Volume.user.js)** |
| [
](https://github.com/XIU2) | **右键滚动条回到顶部** | 鼠标**右键**网页右侧的**滚动条**即可**回到顶部** | **[安装](https://greasyfork.org/zh-CN/scripts/506959)** \| **[备用](https://bitbucket.org/xiu2/userscript/raw/master/RightClick_ScrollBar_BackToTop.user.js)** |
| [
](https://github.com/XIU2) | **新标签页打开链接 \*** | 将网页中所有链接改为**新标签页打开**(可能存在兼容问题 | **[安装](https://greasyfork.org/zh-CN/scripts/429714)** \| **[备用](https://bitbucket.org/xiu2/userscript/raw/master/TargetBlank.user.js)** |
@@ -49,10 +49,10 @@
## 如何安装/使用脚本?
-要使用任何脚本,首先需要浏览器安装 **Tampermonkey 脚本管理器扩展([Chrome](https://pan.lanpw.com/b073l8d1e)** / **[Firefox](https://addons.mozilla.org/firefox/addon/tampermonkey/)** / **[Edge](https://microsoftedge.microsoft.com/addons/detail/tampermonkey/iikmkjmpaadaobahmlepeloendndfphd?hl=zh-CN))。**
+要使用任何脚本,首先需要浏览器安装 **Tampermonkey 脚本管理器扩展([Chrome](https://xiu.lanzoub.com/b073l8d1e)** / **[Firefox](https://addons.mozilla.org/firefox/addon/tampermonkey/)** / **[Edge](https://microsoftedge.microsoft.com/addons/detail/tampermonkey/iikmkjmpaadaobahmlepeloendndfphd?hl=zh-CN))。**
-- 点击表格 **\[安装\]** 进入 GreasyFork 网页,点击 **\[安装脚本\]** 后弹出扩展提示,再点击 **\[安装\]** 即可。
-- 如果 GreasyFork 访问速度太慢,可以选择点击 **\[备用\]** 后弹出扩展提示,再去点击 **\[安装\]** 即可。
+- 点击表格 **`[安装]`** 进入脚本介绍页,点击 **`[安装此脚本]`** 后弹出扩展提示,再点击 **`[安装]`** 即可。
+- 如果 GreasyFork 访问速度太慢,可以选择点击 **`[备用]`** 后弹出扩展提示,再去点击 **`[安装]`** 即可。
> [!IMPORTANT]
> - _其他基于 **Chromium** 内核的浏览器(如国内套皮浏览器)一般都可以使用 Chrome 扩展。_
@@ -78,12 +78,22 @@ Tampermonkey 为了顺应 Chrome 的 Manifest V3 要求,在 v5.0.0 版本中
****
+## 新版本 Chrome 系浏览器无法运行任何脚本?
+
+新版本需要在**扩展管理**界面 Tampermonkey(篡改猴) 详情中**启用 `允许运行用户脚本`** 才能正常运行脚本!
+
+****
+
## 如果脚本帮到你的话就 "打赏" 一下吧~🎉✨

****
+## Sponsor
+
+
+
## License
The GPL-3.0 License.
\ No newline at end of file
diff --git a/Zhihu-Beautification.user.js b/Zhihu-Beautification.user.js
index fdc846182..584671e36 100644
--- a/Zhihu-Beautification.user.js
+++ b/Zhihu-Beautification.user.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 知乎美化
-// @version 1.5.12
+// @version 1.5.20
// @author X.I.U
// @description 宽屏显示、暗黑模式(4种)、暗黑模式跟随浏览器、屏蔽首页活动广告、隐藏文章开头大图、调整图片最大高度、向下翻时自动隐藏顶栏
// @match *://www.zhihu.com/*
@@ -44,6 +44,8 @@
}
registerMenuCommand();
addStyle();
+ // 向下翻时自动隐藏顶栏
+ if (menu_value('menu_hideTitle')) setTimeout(hideTitle, 2000);
// 注册脚本菜单
function registerMenuCommand() {
@@ -138,8 +140,10 @@
.zhihuE_SettingRoot .zhihuE_SettingHeader {padding: 10px 20px;color: #fff;font-weight: bold;background-color: #3994ff;border-radius: 3px 3px 0 0;}
.zhihuE_SettingRoot .zhihuE_SettingMain {padding: 10px 20px;border-radius: 0 0 3px 3px;}
.zhihuE_SettingHeader span {float: right;cursor: pointer;}
-.zhihuE_SettingMain input {margin: 10px 6px 10px 0;cursor: pointer;vertical-align:middle}
-.zhihuE_SettingMain label {margin-right: 20px;user-select: none;cursor: pointer;vertical-align:middle}
+.zhihuE_SettingMain input {margin: 10px 6px 10px 0;vertical-align:middle;}
+.zhihuE_SettingMain input[type=text] {margin: 5px 6px 5px 0;padding-block: 0;}
+.zhihuE_SettingMain input[name=zhihuE_Setting_Checkbox] {cursor: pointer;}
+.zhihuE_SettingMain label {margin-right: 20px;user-select: none;cursor: pointer;vertical-align:middle;}
.zhihuE_SettingMain hr {border: 0.5px solid #f4f4f4;}
[data-theme="dark"] .zhihuE_SettingRoot {color: #adbac7;background-color: #343A44;}
[data-theme="dark"] .zhihuE_SettingHeader {color: #d0d0d0;background-color: #2D333B;}
@@ -150,7 +154,7 @@
if (line) _br = '
'
for (let i=0; i${menu[i][2]}:${_br}`
+ _html += `${_br}`
} else if (GM_getValue(menu[i][0])) {
_html += `${_br}`
} else {
@@ -160,15 +164,20 @@
_html += ``
document.body.insertAdjacentHTML('beforeend', _html); // 插入网页末尾
setTimeout(function() { // 延迟 100 毫秒,避免太快
+ const doc = document.querySelector('.zhihuE_SettingBackdrop_1');
+ if (!doc) return
// 关闭按钮 点击事件
- document.querySelector('.zhihuE_SettingClose').onclick = function(){this.parentElement.parentElement.parentElement.remove();document.querySelector('.zhihuE_SettingStyle').remove();}
+ doc.querySelector('.zhihuE_SettingClose').onclick = function(){this.parentElement.parentElement.parentElement.remove();document.querySelector('.zhihuE_SettingStyle').remove();}
// 点击周围空白处 = 点击关闭按钮
- document.querySelector('.zhihuE_SettingBackdrop_2').onclick = function(event){if (event.target == this) {document.querySelector('.zhihuE_SettingClose').click();};}
+ doc.querySelector('.zhihuE_SettingBackdrop_2').onclick = function(event){if (event.target == this) {document.querySelector('.zhihuE_SettingClose').click();};}
// 复选框 点击事件
- document.getElementsByName('zhihuE_Setting_Checkbox').forEach(function (checkBox) {
+ doc.querySelectorAll('input[name=zhihuE_Setting_Checkbox]').forEach(function (checkBox) {
checkBox.addEventListener('click', function(){if (this.checked) {GM_setValue(this.value, true);} else {GM_setValue(this.value, false);}});
})
- document.getElementsByName('menu_widescreenDisplayWidth')[0].onchange = function(){GM_setValue(this.name, this.value);};
+ // 输入框 变化事件
+ doc.querySelectorAll('input[type=text]').forEach(function (checkBox) {
+ checkBox.onchange = function(){GM_setValue(this.name, this.value);};
+ })
}, 100)
}
@@ -203,41 +212,52 @@ html[data-theme=light] .AppHeader-notifications:not([aria-label=通知])>div:fir
`,
style_widescreenDisplayIndex = `/* 宽屏显示 - 首页 */
.Topstory-mainColumn, .QuestionWaiting-mainColumn {width: inherit !important;}
-.Topstory-mainColumn+div,[data-za-detail-view-path-module="RightSideBar"] {display: none !important;}
+.Topstory-mainColumn~div,[data-za-detail-view-path-module="RightSideBar"] {display: none !important;}
.Topstory-container {width: ${GM_getValue('menu_widescreenDisplayWidth')}px;}
+@media only screen and (max-width: ${Number(GM_getValue('menu_widescreenDisplayWidth'))+50}px) {.Topstory-container {width: 97% !important;}}
`,
style_widescreenDisplayQuestion = `/* 宽屏显示 - 问题页 */
.Question-mainColumn, .ListShortcut, .QuestionWaiting-mainColumn {width: inherit !important;}
.Question-mainColumn+div,[data-za-detail-view-path-module="RightSideBar"], .Question-sideColumn, .GlobalSideBar {display: none !important;}
.QuestionWaiting-mainColumn {margin-right: 0 !important;}
.Question-main {width: ${GM_getValue('menu_widescreenDisplayWidth')}px;}
+@media only screen and (max-width: ${Number(GM_getValue('menu_widescreenDisplayWidth'))+50}px) {.Question-main {width: auto !important;}}
+@media only screen and (max-width: ${GM_getValue('menu_widescreenDisplayWidth')-100}px) {.Question-main {width: 98.5% !important;}}
.AuthorInfo {max-width: 100% !important;}
`,
style_widescreenDisplaySearch = `/* 宽屏显示 - 搜索页 */
.SearchMain, .ContentLayout-mainColumn, .Club-mainColumn, .Post-mainColumn, [data-za-detail-view-path-module=TopicItem]>div:first-child {width: inherit !important;}
.SearchMain+div, .ContentLayout-sideColumn, .Card.QuestionHeaderTopicMeta, .ClubSideBar, [data-za-detail-view-path-module=TopicItem]>div:not(:first-child) {display: none !important;}
.Search-container, .ContentLayout, .Club-container, .Post-container, [data-za-detail-view-path-module=TopicItem] {width: ${GM_getValue('menu_widescreenDisplayWidth')}px;}
+@media only screen and (max-width: ${Number(GM_getValue('menu_widescreenDisplayWidth'))+50}px) {.Search-container, .ContentLayout, .Club-container, .Post-container, [data-za-detail-view-path-module=TopicItem] {width: 97.5% !important;}}
`,
style_widescreenDisplayCollection = `/* 宽屏显示 - 收藏页 */
.CollectionsDetailPage-mainColumn {width: inherit !important;}
-.CollectionsDetailPage-mainColumn+div, {display: none !important;}
+.CollectionsDetailPage-mainColumn+div {display: none !important;}
.CollectionsDetailPage {width: ${GM_getValue('menu_widescreenDisplayWidth')}px;}
+@media only screen and (max-width: ${Number(GM_getValue('menu_widescreenDisplayWidth'))+50}px) {.CollectionsDetailPage {width: 98.5% !important;}}
`,
style_widescreenDisplayPost = `/* 宽屏显示 - 文章页 */
+.Post-content {min-width: auto !important;}
.Post-SideActions {left: calc(10vw) !important;}
-.Post-NormalMain .Post-Header, .Post-NormalMain>div, .Post-NormalSub>div {width: ${GM_getValue('menu_widescreenDisplayWidth')}px !important;}
+.Post-Row-Content-right {display: none !important;}
+.Post-Row-Content, .Post-Row-Content-left, .RichContent-actions {width: ${GM_getValue('menu_widescreenDisplayWidth')}px !important;}
+@media only screen and (max-width: ${Number(GM_getValue('menu_widescreenDisplayWidth'))+50}px) {.Post-Row-Content, .Post-Row-Content-left, .RichContent-actions {width: auto !important;}}
+@media only screen and (max-width: ${GM_getValue('menu_widescreenDisplayWidth')-100}px) {.Post-Row-Content, .Post-Row-Content-left, .RichContent-actions {width: 98% !important;}}
`,
style_widescreenDisplayPeople = `/* 宽屏显示 - 用户主页 */
.Profile-mainColumn {width: inherit !important;}
.Profile-mainColumn+div,[data-za-module="RightSideBar"],.Profile-sideColumn {display: none !important;}
.Profile-main, #ProfileHeader {width: ${GM_getValue('menu_widescreenDisplayWidth')}px !important;}
+@media only screen and (max-width: ${Number(GM_getValue('menu_widescreenDisplayWidth'))+50}px) {.Profile-main, #ProfileHeader {width: auto !important;}}
+@media only screen and (max-width: ${GM_getValue('menu_widescreenDisplayWidth')-100}px) {.Profile-main, #ProfileHeader {width: 98.5% !important;}}
`,
style_2 = `/* 隐藏在各列表中查看文章时开头显示的大图,不影响文章、专栏页面 */
.RichContent img.ArticleItem-image {display: none !important;}
`,
- style_3 = `/* 向下翻时自动隐藏顶栏*/
-header.is-hidden {display: none;}
-`,
+// style_3 = `/* 向下翻时自动隐藏顶栏*/
+//header.is-hidden {display: none;}
+//`,
style_4 = `/* 调整图片最大高度 */
.ztext .content_image, .ztext .origin_image, .GifPlayer img {max-height: 500px !important;width: auto !important;}
`,
@@ -273,6 +293,9 @@ html[data-theme=dark] .LinkCard-backdrop {background-image: url() !important;}
html[data-theme=dark] .Avatar, html[data-theme=dark] .UserAvatar {background-color: #2d333b !important;}
html[data-theme=dark] .UserAvatar {border: 4px solid #2d333b !important;}
+/* 划词提示文字和背景颜色 */
+html[data-theme=dark] .css-fg13ww {color: #adbac7 !important; background-color: #363d47 !important; border-radius: 10px !important;}
+
/* 通知信息中点评论链接时,在弹出的评论框中 "高亮" 目标评论 */
html[data-theme=dark] .CommentItemV2[tabindex='-1'] {background-color: #343a44 !important;}
@@ -308,7 +331,7 @@ html[data-theme=dark] img.UserCover-image, html[data-theme=dark] img.TitleImage
/* 其他图片 */
html[data-theme=dark] img {opacity: 0.8 !important;}
/* GIF 动图、放大图除外 */
-html[data-theme=dark] .GifPlayer img, html[data-theme=dark] .ImageView-img {opacity: 1 !important;}
+html[data-theme=dark] .GifPlayer img, html[data-theme=dark] .ImageView-img, html[data-theme=dark]>body>img {opacity: 1 !important;}
/* 边框 */
html[data-theme=dark] .Topbar, html[data-theme=dark] .CommentsV2-footer, html[data-theme=dark] .Topstory-mainColumnCard .Card:not(.Topstory-tabCard), html[data-theme=dark] .NestComment:not(:last-child):after, html[data-theme=dark] .NestComment--rootComment:after, html[data-theme=dark] .NestComment .NestComment--child:after, html[data-theme=dark] .NestComment .NestComment--child:after, html[data-theme=dark] .CommentsV2-replyNum, html[data-theme=dark] .CommentItemV2:not(:first-child):after, html[data-theme=dark] .Tabs, html[data-theme=dark] .Popover-arrow:after, html[data-theme=dark] .SelfCollectionItem-innerContainer, html[data-theme=dark] .CollectionDetailPageItem-innerContainer {border-bottom: 1px solid #282d35 !important;}
@@ -334,7 +357,7 @@ html {scrollbar-width: thin; scrollbar-color: #3f4752 #22272e;}
.MessagesBox, .Messages-list, .PushNotifications-list, .CommentListV2, .ChatListGroup-SectionContent, .ChatSideBar-Search-ResultListWrap {scrollbar-width: thin; scrollbar-color: #3f4752 #2D333B;}
/* 背景颜色 - 专栏/文章 */
-html[data-theme=dark] .WhiteBg-body, html[data-theme=dark] .Post-content {background: #22272E !important;}
+html[data-theme=dark] .WhiteBg-body, html[data-theme=dark] .Post-content, html[data-theme=dark] .Post-Row-Content .Post-Row-Content-left {background: #22272E !important;}
html[data-theme=dark] .ColumnPageHeader, html[data-theme=dark] .BottomInfo {background: #1c2129 !important;}
/* 按钮颜色 */
@@ -350,6 +373,9 @@ html[data-theme=dark] .Reward-TipjarDialog-amountList .Button--red, html[data-th
/* 赞同 */
html[data-theme=dark] .VoteButton.is-active {color: #d6edff !important;}
+
+/* 创作中心 - 分析图表 */
+html[data-theme=dark] .CreatorSection-body .AnalyticsChart text {fill: #adbac7 !important;}
`,
style_darkMode_1_x = `/* 问题日志页 */
html[data-theme=dark] .zu-top {background: #2D333B !important;border: none !important;}
@@ -460,8 +486,6 @@ html {filter: brightness(65%) sepia(30%) !important; background-image: url();}
if (menu_value('menu_picHeight')) style += style_4;
// 隐藏文章开头大图
if (menu_value('menu_postimg')) style += style_2;
- // 向下翻时自动隐藏顶栏
- if (menu_value('menu_hideTitle')) style += style_3;
if (document.lastChild) {
document.lastChild.appendChild(style_Add).textContent = style;
@@ -475,6 +499,27 @@ html {filter: brightness(65%) sepia(30%) !important; background-image: url();}
}
}
+ function hideTitle() {
+ // 获取需要控制的元素
+ const floatingElement = document.getElementsByTagName('header')[0];
+ let beforeScrollTop = document.documentElement.scrollTop || document.body.scrollTop,
+ scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop,
+ scrollHeight = window.innerHeight || document.documentElement.clientHeight
+
+ window.addEventListener('scroll', function (e) {
+ var afterScrollTop = document.documentElement.scrollTop || document.body.scrollTop,
+ delta = afterScrollTop - beforeScrollTop;
+ //console.log(delta,floatingElement)
+ if (delta == 0) return false;
+ if (delta > 0) {// 向下滚动 隐藏
+ floatingElement.hidden = true;
+ } else {
+ // 向上滚动 显示
+ floatingElement.hidden = false;
+ }
+ beforeScrollTop = afterScrollTop;
+ }, false);
+ }
// 获取知乎 Cookie 中的主题类型
function getTheme() {
diff --git a/Zhihu-Enhanced.user.js b/Zhihu-Enhanced.user.js
index c9b3b673e..f33be9ca2 100644
--- a/Zhihu-Enhanced.user.js
+++ b/Zhihu-Enhanced.user.js
@@ -3,11 +3,11 @@
// @name:zh-CN 知乎增强
// @name:zh-TW 知乎增強
// @name:ru Улучшение Zhihu
-// @version 2.3.12
+// @version 2.3.25
// @author X.I.U
// @description A more personalized Zhihu experience~
-// @description:zh-CN 屏蔽指定类别(视频、盐选、文章、想法、关注[赞同了XX/关注了XX]等等)、屏蔽用户、屏蔽关键词、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回到顶部(右键两侧)、区分问题文章、移除高亮链接、净化搜索热门、净化标题消息、展开问题描述、显示问题作者、默认高清原图(无水印)、置顶显示时间、完整问题时间、直达问题按钮、默认站外直链...
-// @description:zh-TW 屏蔽指定類別(視頻、鹽選、文章、想法、關注[贊同了XX/關注了XX]等等)、屏蔽用戶、屏蔽關鍵詞、默認收起回答、快捷收起回答/評論、快捷回到頂部、區分問題文章、移除高亮鏈接、默認高清原圖(無水印)、默認站外直鏈...
+// @description:zh-CN 移除登录弹窗、屏蔽指定类别(视频、盐选、文章、想法、关注[赞同/关注了XX]等)、屏蔽低赞/低评回答、屏蔽用户、屏蔽关键词、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回到顶部(右键两侧)、区分问题文章、移除高亮链接、净化搜索热门、净化标题消息、展开问题描述、显示问题作者、默认高清原图(无水印)、置顶显示时间、完整问题时间、直达问题按钮、默认站外直链...
+// @description:zh-TW 移除登錄彈窗、屏蔽指定類別(視頻、鹽選、文章、想法、關注[贊同/關注了XX]等)、屏蔽低贊/低評回答、屏蔽用戶、屏蔽關鍵詞、默認收起回答、快捷收起回答/評論、快捷回到頂部、區分問題文章、移除高亮鏈接、默認高清原圖(無水印)、默認站外直鏈...
// @description:ru Более персонализированный опыт пользования сайтом Zhihu~
// @match *://www.zhihu.com/*
// @match *://zhuanlan.zhihu.com/*
@@ -36,6 +36,13 @@ var menu_ALL = [
['menu_collapsedAnswer', '一键收起回答/评论', '一键收起回答/评论', true],
['menu_collapsedNowAnswer', '快捷收起回答/评论 (点击两侧空白处)', '快捷收起回答/评论', true],
['menu_backToTop', '快捷回到顶部 (右键两侧空白处)', '快捷回到顶部', true],
+ ['menu_blockLowCount', '屏蔽低赞低评', '设置要屏蔽 低于多少赞同/评价 的回答(默认不需要留空即可)
(例如设置 0 则无人赞同/评价的回答会被屏蔽
(例如设置 20 则赞同/评价数量低于 20 的回答会被屏蔽
(修改后,后续加载的回答会立即生效,但不影响当前网页已有内容', ''],
+ ['menu_blockLowUpvoteCount', '最低赞同数 [首页]', '最低赞同数(首页)', ''],
+ ['menu_blockLowCommentCount', '最低评价数 [首页]', '最低评价数(首页)', ''],
+ ['menu_blockLowUpvoteCountQuestion', '最低赞同数 [问题页]', '最低赞同数(问题页)', ''],
+ ['menu_blockLowCommentCountQuestion', '最低评价数 [问题页]', '最低评价数(问题页)', ''],
+ ['menu_blockLowUpvoteCountFollow', '最低赞同数 [关注页]', '最低赞同数(关注页)', ''],
+ ['menu_blockLowCommentCountFollow', '最低评价数 [关注页]', '最低评价数(关注页)', ''],
['menu_blockUsers', '屏蔽指定用户', '屏蔽指定用户', true],
['menu_customBlockUsers', '自定义屏蔽用户', '自定义屏蔽用户', ['故事档案局', '盐选推荐', '盐选科普', '盐选成长计划', '知乎盐选会员', '知乎盐选创作者', '盐选心理', '盐选健康必修课', '盐选奇妙物语', '盐选生活馆', '盐选职场', '盐选文学甄选', '盐选作者小管家', '盐选博物馆', '盐选点金', '盐选测评室', '盐选科技前沿', '盐选会员精品']],
['menu_blockKeywords', '屏蔽指定关键词', '屏蔽指定关键词', true],
@@ -73,7 +80,12 @@ function registerMenuCommand() {
}
for (let i=0;i${tips}
`
if (line) _br = '
'
for (let i=0; i${menu[i][1]}${_br}`
+ if (menu[i][0].indexOf('menu_blockLow') === 0) {
+ _html += `${_br}`
+ } else if (GM_getValue(menu[i][0])) {
+ _html += `${_br}`
} else {
- _html += `${_br}`
+ _html += `${_br}`
}
}
_html += ``
document.body.insertAdjacentHTML('beforeend', _html); // 插入网页末尾
setTimeout(function() { // 延迟 100 毫秒,避免太快
+ const doc = document.querySelector('.zhihuE_SettingBackdrop_1');
+ if (!doc) return
// 关闭按钮 点击事件
- document.querySelector('.zhihuE_SettingClose').onclick = function(){this.parentElement.parentElement.parentElement.remove();document.querySelector('.zhihuE_SettingStyle').remove();}
+ doc.querySelector('.zhihuE_SettingClose').onclick = function(){this.parentElement.parentElement.parentElement.remove();document.querySelector('.zhihuE_SettingStyle').remove();}
// 点击周围空白处 = 点击关闭按钮
- document.querySelector('.zhihuE_SettingBackdrop_2').onclick = function(event){if (event.target == this) {document.querySelector('.zhihuE_SettingClose').click();};}
+ doc.querySelector('.zhihuE_SettingBackdrop_2').onclick = function(event){if (event.target == this) {document.querySelector('.zhihuE_SettingClose').click();};}
// 复选框 点击事件
- document.getElementsByName('zhihuE_Setting').forEach(function (checkBox) {
- checkBox.addEventListener('click', function(){if (this.checked) {GM_setValue(this.value, true);} else {GM_setValue(this.value, false);}});
+ doc.querySelectorAll('input[name=zhihuE_Setting_Checkbox]').forEach(function (checkBox) {
+ checkBox.addEventListener('click', function(){if (this.checked) {console.log('this.value',true);GM_setValue(this.value, true);} else {console.log('this.value',false);GM_setValue(this.value, false);}});
+ })
+ // 输入框 变化事件
+ doc.querySelectorAll('input[type=text]').forEach(function (checkBox) {
+ checkBox.onchange = function(){GM_setValue(this.name, this.value);};
})
}, 100)
}
@@ -423,6 +445,71 @@ function isElementInViewport_(el) {
}
+// 屏蔽低赞/低评回答
+function blockLowCount(type) {
+ switch(type) {
+ case 'index':
+ blockLowCount_('.Card.TopstoryItem.TopstoryItem-isRecommend', 'Card TopstoryItem TopstoryItem-isRecommend', 'menu_blockLowUpvoteCount', 'menu_blockLowCommentCount');
+ break;
+ case 'follow':
+ blockLowCount_('.Card.TopstoryItem.TopstoryItem-isFollow', 'Card TopstoryItem TopstoryItem-isFollow', 'menu_blockLowUpvoteCountFollow', 'menu_blockLowCommentCountFollow');
+ break;
+ case 'question':
+ blockLowCount_('.List-item', 'List-item', 'menu_blockLowUpvoteCountQuestion', 'menu_blockLowCommentCountQuestion');
+ break;
+ }
+
+
+ function blockLowCount_(className1, className2, menuUpvote, menuComment) {
+ // 前几条因为是直接加载的,而不是动态插入网页的,所以需要单独判断
+ function blockLowCount_now() {
+ document.querySelectorAll(className1).forEach(function(item1){
+ blockLowCount_1(item1,menuUpvote,'meta[itemprop=upvoteCount]');
+ blockLowCount_1(item1,menuComment,'meta[itemprop=commentCount]');
+ })
+ }
+
+ blockLowCount_now();
+ window.addEventListener('urlchange', function(){
+ setTimeout(blockLowCount_now, 1000); // 网页 URL 变化后再次执行
+ })
+
+ // 这个是监听网页插入事件,用来判断后续网页动态插入的元素
+ const callback = (mutationsList, observer) => {
+ for (const mutation of mutationsList) {
+ for (const target of mutation.addedNodes) {
+ if (target.nodeType != 1) return
+ if (target.className === className2) {
+ blockLowCount_1(target,menuUpvote,'meta[itemprop=upvoteCount]');
+ blockLowCount_1(target,menuComment,'meta[itemprop=commentCount]');
+ }
+ }
+ }
+ };
+ const observer = new MutationObserver(callback);
+ observer.observe(document, { childList: true, subtree: true });
+ }
+
+
+ function blockLowCount_1(item1, menu, css) {
+ if (GM_getValue(menu)) {
+ let item = item1.querySelector(css);
+ //console.log(item)
+ if (item && item.content && Number(item.content) < Number(GM_getValue(menu))) {
+ if (menu.indexOf('Upvote') !== -1) {
+ console.log('已屏蔽低赞回答:', item.content + '<' + GM_getValue(menu), item1, type);
+ } else {
+ console.log('已屏蔽低评回答:', item.content + '<' + GM_getValue(menu), item1, type);
+ }
+ item1.hidden = true;
+ item1.style.display = 'none';
+ }
+ }
+ }
+}
+
+
+
// 自定义屏蔽用户
function customBlockUsers() {
let nowBlockUsers = '';
@@ -447,6 +534,9 @@ function blockUsers(type) {
case 'index':
blockUsers_('.Card.TopstoryItem.TopstoryItem-isRecommend', 'Card TopstoryItem TopstoryItem-isRecommend');
break;
+ case 'follow':
+ blockUsers_('.Card.TopstoryItem.TopstoryItem-isFollow', 'Card TopstoryItem TopstoryItem-isFollow');
+ break;
case 'question':
blockUsers_question();
break;
@@ -1115,6 +1205,8 @@ function addTypeTips() {
let style = `font-weight: bold;font-size: 13px;padding: 1px 4px 0;border-radius: 2px;display: inline-block;vertical-align: top;margin: ${(location.pathname === '/search') ? '2' : '4'}px 4px 0 0;`
document.body.appendChild(document.createElement('style')).textContent = `/* 区分问题文章 */
.AnswerItem .ContentItem-title a:not(.zhihu_e_toQuestion)::before {content:'问题';color: #f68b83;background-color: #f68b8333;${style}}
+/* 针对的是部分搜索词下搜索页开头的 "最新讨论" 之类的非常规元素 */
+.HotLanding-contentItem .ContentItem[data-za-detail-view-path-module=Content] .ContentItem-title a:not(.zhihu_e_toQuestion)::before {content:'问题';color: #f68b83;background-color: #f68b8333;${style}}
.TopstoryQuestionAskItem .ContentItem-title a:not(.zhihu_e_toQuestion)::before {content:'问题';color: #ff5a4e;background-color: #ff5a4e33;${style}}
.ZVideoItem .ContentItem-title a::before, .ZvideoItem .ContentItem-title a::before {content:'视频';color: #00BCD4;background-color: #00BCD433;${style}}
.PinItem .ContentItem-title a::before {content:'想法';color: #4CAF50;background-color: #4CAF5033;${style}}
@@ -1157,7 +1249,9 @@ function addToQuestion() {
titleA.innerHTML = titleA.innerHTML.replace('?', "?")
}
if (/answer\/\d+/.test(titleA.href)) { // 如果是指向回答的问题(而非指向纯问题的链接)
- titleA.insertAdjacentHTML('afterend', `直达问题`);
+ const titleA_meta = titleA.parentElement.parentElement.querySelector('meta[itemprop="url"]'); // 获取该问题页地址
+ if (!titleA_meta) return // 判断元素是否存在(针对的是部分搜索词下搜索页开头的 "最新讨论" 之类的非常规元素)
+ titleA.insertAdjacentHTML('afterend', `直达问题`);
}
}
@@ -1180,6 +1274,38 @@ function questionRichTextMore() {
if (button) button.click()
}
+// 移除登录弹窗
+function removeLogin() {
+ const removeLoginModal = (mutationsList, observer) => {
+ for (const mutation of mutationsList) {
+ for (const target of mutation.addedNodes) {
+ if (target.nodeType != 1) return
+ if (target.querySelector('.signFlowModal')) {
+ let button = target.querySelector('.Button.Modal-closeButton.Button--plain');
+ if (button) button.click();
+ } else if (getXpath('//button[text()="立即登录/注册"]',target)) {
+ target.remove();
+ }
+ }
+ }
+ };
+
+ // 未登录时才会监听并移除登录弹窗
+ if(location.hostname === 'zhuanlan.zhihu.com') { // 如果是文章页
+ if (!document.querySelector('.ColumnPageHeader-profile>.AppHeader-menu')) { // 未登录
+ const observer = new MutationObserver(removeLoginModal);
+ observer.observe(document, { childList: true, subtree: true });
+ if (getXpath('//button[text()="登录/注册"]')) getXpath('//button[text()="登录/注册"]').outerHTML = ''; // [登录] 按钮跳转至登录页面
+ }
+ } else { // 不是文章页
+ if (!document.querySelector('.AppHeader-profile>.AppHeader-menu')) { // 未登录
+ const observer = new MutationObserver(removeLoginModal);
+ observer.observe(document, { childList: true, subtree: true });
+ document.lastElementChild.appendChild(document.createElement('style')).textContent = '.Question-mainColumnLogin, button.AppHeader-login {display: none !important;}'; // 屏蔽问题页中间的登录提示
+ if (getXpath('//button[text()="登录/注册"]')) getXpath('//button[text()="登录/注册"]').outerHTML = ''; // [登录] 按钮跳转至登录页面
+ }
+ }
+}
// 净化标题消息
function cleanTitles() {
@@ -1292,7 +1418,7 @@ function getXpath(xpath, contextNode, doc = document) {
// 显示问题作者
function question_author() {
- if (document.querySelector('.BrandQuestionSymbol, .QuestionAuthor')) return
+ if (document.querySelector('.BrandQuestionSymbol, .QuestionAuthor, .SpecialQuestionAuthor')) return
let qJson = JSON.parse(document.querySelector('#js-initialData').textContent).initialState.entities.questions[/\d+/.exec(location.pathname)[0]].author,
html = ``;
//html = ``
@@ -1306,7 +1432,7 @@ function question_author() {
function topTime_(css, classs) {
document.querySelectorAll(css).forEach(function(_this) {
let t = _this.querySelector('.ContentItem-time'); if (!t) return
- if (!(t.classList.contains('full')) && t.querySelector('span') && t.querySelector('span').textContent != null) {
+ if (!(t.classList.contains('full')) && t.querySelector('a') && t.querySelector('a').textContent != null) {
// 完整显示时间
topTime_allTime(t)
// 发布时间置顶
@@ -1339,10 +1465,10 @@ function topTime_post() {
// 完整显示时间
function topTime_allTime(t) {
if (t.textContent.indexOf('发布于') > -1 && t.textContent.indexOf('编辑于') == -1) {
- t.querySelector('span').textContent = (t.querySelector('span').dataset.tooltip);
+ t.querySelector('a').textContent = (t.querySelector('a').dataset.tooltip);
t.classList.add('full');
} else if (t.textContent.indexOf('发布于') == -1 && t.textContent.indexOf('编辑于') > -1) {
- t.querySelector('span').textContent = (t.querySelector('span').dataset.tooltip) + ' ,' + (t.querySelector('span').textContent);
+ t.querySelector('a').textContent = (t.querySelector('a').dataset.tooltip) + ' ,' + (t.querySelector('a').textContent);
t.classList.add('full');
}
}
@@ -1455,49 +1581,32 @@ function blockHotOther() {
block();
}
+// 将关注/推荐/热榜/专栏的选项去掉默认的点击事件改成静态链接(针对首页互相切换(知乎这里切换是动态加载的),为了避免功能交叉混乱
+// 针对所有页面
+function switchHome() {
+ document.querySelectorAll('header.AppHeader nav').forEach((a)=>{a.outerHTML = a.outerHTML;})
+}
+// 针对首页几个页面
+function switchHomeRecommend() {
+ document.querySelectorAll('header.AppHeader nav>a:not([target])[href="https://www.zhihu.com/"]').forEach((a)=>{a.addEventListener('click', function(e){e.preventDefault();document.cookie='tst=r; expires=Thu, 18 Dec 2099 12:00:00 GMT; domain=.zhihu.com; path=/';location.href=this.href;return false;})})
+}
(function() {
if (window.onurlchange === undefined) {addUrlChangeEvent();} // Tampermonkey v4.11 版本添加的 onurlchange 事件 grant,可以监控 pjax 等网页的 URL 变化
- window.addEventListener('urlchange', function(){ // 针对的是从单个回答页跳转到完整回答页时
- if (location.pathname.indexOf('question') > -1 && location.pathname.indexOf('waiting') === -1 && location.pathname.indexOf('/answer/') === -1) { // 回答页 //
- setTimeout(function(){
- collapsedNowAnswer('.QuestionPage'); // 收起当前回答 + 快捷返回顶部
- collapsedNowAnswer('.Question-main'); // 收起当前回答 + 快捷返回顶部
- questionRichTextMore(); // 展开问题描述
- blockUsers('question'); // 屏蔽指定用户
- blockYanXuan(); // 屏蔽盐选内容
- }, 300);
- } else if (location.pathname == '/') { // 推荐
- setTimeout(()=>{
- blockUsers('index'); // 屏蔽指定用户
- blockKeywords('index'); // 屏蔽指定关键词
- blockType(); // 屏蔽指定类别(视频/文章等)
- }, 500);
- } else if (location.pathname == '/hot') { // 热榜
- setTimeout(()=>{
- blockKeywords('index'); // 屏蔽指定关键词
- blockHotOther(); // 移除热播杂项
- }, 500);
- } else if (location.pathname == '/follow') { // 关注
- setTimeout(()=>{
- blockKeywords('follow'); // 屏蔽指定关键词
- blockType(); // 屏蔽指定类别(视频/文章等)
- blockType('follow'); // 屏蔽指定类别(赞同了XX/关注了XX等)
- }, 500);
- }
- })
+ removeLogin(); // 移除登录弹窗,Violentmonkey 不能延迟执行这个
cleanTitles(); // 净化标题消息,不能延迟执行
// Violentmonkey 比 Tampermonkey 加载更早,会导致一些元素还没加载,因此需要延迟一会儿
// Tampermonkey 4.18.0 版本可能需要延迟一会执行
if (GM_info.scriptHandler === 'Violentmonkey' || (GM_info.scriptHandler === 'Tampermonkey' && parseFloat(GM_info.version.slice(0,4)) >= 4.18)) {
- setTimeout(start, 300);
+ setTimeout(start, 200);
} else {
start();
}
function start(){
- cleanHighlightLink(); // 移除高亮链接
+ switchHome(); // 将关注/推荐/热榜/专栏的选项去掉默认的点击事件改成静态链接(针对首页互相切换(知乎这里切换是动态加载的),为了避免功能交叉混乱
+ cleanHighlightLink(); // 移除高亮链接
originalPic();directLink(); // 先立即执行一次
setInterval(originalPic,500); // 默认高清原图(无水印)
setInterval(directLink, 500); // 默认站外直链
@@ -1514,6 +1623,11 @@ function blockHotOther() {
collapsedNowAnswer('.QuestionPage'); // 收起当前回答 + 快捷返回顶部
collapsedNowAnswer('.Question-main'); // 收起当前回答 + 快捷返回顶部
questionRichTextMore(); // 展开问题描述
+ if (location.pathname.indexOf('answer') == -1) { // 问题页而不是回答页
+ blockLowCount('question'); // 屏蔽低赞/低评回答
+ } else { // 将回答页的的查看全部回答选项去掉默认的点击事件改成静态链接,为了避免功能交叉混乱
+ document.querySelectorAll('div.Card.ViewAll>a').forEach((a)=>{a.outerHTML = a.outerHTML;})
+ }
blockUsers('question'); // 屏蔽指定用户
blockYanXuan(); // 屏蔽盐选内容
blockType('question'); // 屏蔽指定类别(视频/文章等)
@@ -1545,8 +1659,8 @@ function blockHotOther() {
}
} else if (location.hostname === 'zhuanlan.zhihu.com'){ // 文章 //
- backToTop('article.Post-Main.Post-NormalMain'); // 快捷返回顶部
- backToTop('div.Post-Sub.Post-NormalSub'); // 快捷返回顶部
+ backToTop('.Post-content'); // 快捷返回顶部
+ backToTop('.Post-Row-Content'); // 快捷返回顶部
setTimeout(topTime_post, 300); // 置顶显示时间
blockUsers(); // 屏蔽指定用户
@@ -1581,29 +1695,33 @@ function blockHotOther() {
backToTop('main[role=main]'); // 快捷返回顶部
setInterval(function(){topTime_('.ContentItem.PinItem', 'ContentItem-meta')}, 300); // 置顶显示时间
- } else { // 首页 //
+ } else if (['/','/hot','/follow','/column-square','/ring-feeds'].indexOf(location.pathname) !== -1) { // 首页 //
+ switchHomeRecommend(); // 针对首页推荐
// 解决屏蔽类别后,因为首页信息流太少而没有滚动条导致无法加载更多内容的问题
document.lastElementChild.appendChild(document.createElement('style')).textContent = '.Topstory-container {min-height: 1500px;}';
if (menu_value('menu_blockTypeVideo')) document.lastChild.appendChild(document.createElement('style')).textContent = `.Card .ZVideoItem-video, nav.TopstoryTabs > a[aria-controls="Topstory-zvideo"] {display: none !important;}`;
collapsedNowAnswer('main div'); // 收起当前回答 + 快捷返回顶部
collapsedNowAnswer('.Topstory-container'); // 收起当前回答 + 快捷返回顶部
- setInterval(function(){topTime_('.TopstoryItem', 'ContentItem-meta')}, 300); // 置顶显示时间
- addTypeTips(); // 区分问题文章
- addToQuestion(); // 直达问题按钮
- if (location.pathname == '/') { // 推荐
- blockUsers('index'); // 屏蔽指定用户
- blockKeywords('index'); // 屏蔽指定关键词
- blockType(); // 屏蔽指定类别(视频/文章等)
- } else if (location.pathname == '/hot') { // 热榜
- blockKeywords('index'); // 屏蔽指定关键词
- blockHotOther(); // 屏蔽热榜杂项
- } else if (location.pathname == '/follow') { // 关注
- blockKeywords('follow'); // 屏蔽指定关键词
- blockType(); // 屏蔽指定类别(视频/文章等)
- blockType('follow'); // 屏蔽指定类别(赞同了XX/关注了XX等)
- } else {
- blockUsers();
+ if (location.pathname !== '/column-square'){ // 不是首页 - 专栏时
+ setInterval(function(){topTime_('.TopstoryItem', 'ContentItem-meta')}, 300); // 置顶显示时间
+ addTypeTips(); // 区分问题文章
+ addToQuestion(); // 直达问题按钮
+ if (location.pathname == '/') { // 推荐
+ blockLowCount('index'); // 屏蔽低赞/低评回答
+ blockUsers('index'); // 屏蔽指定用户
+ blockKeywords('index'); // 屏蔽指定关键词
+ blockType(); // 屏蔽指定类别(视频/文章等)
+ } else if (location.pathname == '/hot') { // 热榜
+ blockKeywords('index'); // 屏蔽指定关键词
+ blockHotOther(); // 屏蔽热榜杂项
+ } else if (location.pathname == '/follow') { // 关注
+ blockLowCount('follow'); // 屏蔽低赞/低评回答
+ blockUsers('follow'); // 屏蔽指定用户
+ blockKeywords('follow'); // 屏蔽指定关键词
+ blockType(); // 屏蔽指定类别(视频/文章等)
+ blockType('follow'); // 屏蔽指定类别(赞同了XX/关注了XX等)
+ }
}
}
}
diff --git a/other/Autopage/rules.json b/other/Autopage/rules.json
index eb4354267..b10398998 100644
--- a/other/Autopage/rules.json
+++ b/other/Autopage/rules.json
@@ -2,7 +2,7 @@
"百度搜索": {
"host": ["www.baidu.com","ipv6.baidu.com"],
"url": "fun.isUrlC(); if (fun.isMobile()) {location.hostname = 'm.baidu.com';} else {return (fun.lp() == '/s')}",
- "style": ".new-pmd .c-img-border {position: initial !important;} .op-bk-polysemy-video__wrap.c-gap-bottom {display: none !important;}",
+ "style": ".new-pmd .c-img-border {position: initial !important;} .op-bk-polysemy-video__wrap.c-gap-bottom, #content_left:not([style])>.result-op[tpl='new_baikan_index'], #content_left:not([style])>.result-op[tpl='ai_ask'] {display: none !important;}",
"history": true,
"pager": {
"nextL": "#page strong+a:not(.n)",
@@ -35,14 +35,9 @@
"host": "/^www\\.google\\./",
"url": "return (fun.lp() == '/search' && (!fun.indexOF('tbm=','s') || (fun.indexOF('tbm=nws','s') || fun.indexOF('tbm=vid','s') || fun.indexOF('tbm=bks','s'))) && (fun.indexOF('sclient=mobile','s') || fun.isMobile()))",
"pager": {
- "nextL": "footer>div:first-child a[aria-label]",
- "pageE": "id('main')/div[position()>1][position()div",
+ "isHidden": true
}
},
"谷歌搜索": {
@@ -51,19 +46,16 @@
"history": true,
"pager": {
"nextL": "#pnnext,footer>div:first-child a[aria-label]",
- "pageE": "id('search')/div | id('rso')/div | //style[not(contains(text(),'table,div,span,p{display:none}'))] | //body/script[@nonce][not(@src)][starts-with(text(),'(function(){var s=') or starts-with(text(),'(function(){google.ldi')]",
+ "pageE": "id('search')/div | id('rso')/div | //style[not(contains(text(),'table,div,span,p{display:none}'))] | //body//script[@nonce][not(@src)][contains(text(),'_setImagesSrc')]",
"replaceE": "#navcnt,#rcnt div[role='navigation'],#botstuff div[role='navigation'],#main>footer>div:first-child",
"scriptT": 2,
"scrollD": 2500
- },
- "function": {
- "bF": "fun.getAllCSS('#search img[id^=dimg],#search img[id^=rimg],#rso img[id^=dimg],#rso img[id^=rimg]').forEach(function (img) {img.id = 'old_'+img.id;}); if(!fun.indexOF('tbm=vid','s') && fun.indexOF('tbm=','s')){return pageE}else{pageE.forEach(function (img) {fun.getAllCSS('img[id^=dimg]:not([data-atf])',img).forEach(function (img1) {img1.setAttribute('data-atf','1');})}); return pageE}"
}
},
"必应搜索 + 手机版": {
"host": ["www.bing.com","cn.bing.com","www4.bing.com","global.bing.com"],
- "url": "if (fun.lp() == '/search') {if (fun.isMobile() && document.documentElement.lang != 'zh') {return false;} else {return true;}}",
- "style": "#b_footer,.b_msg,#bnp_rich_div",
+ "url": "fun.isUrlC();if (fun.lp() == '/search') {if (fun.isMobile()){rule.blank=3;rule.pager.type=6;rule.pager.loadTime=1000;};return true;}",
+ "style": "#b_footer,.b_msg,#bnp_rich_div,.cn_related_search_upsell_container",
"history": true,
"pager": {
"nextL": "a.sb_pagN,a.sb_halfnext,a.sb_fullnpl",
@@ -182,11 +174,21 @@
"url": "/\\/search/",
"history": false,
"pager": {
- "nextL": "js; return fun.getNextF('//div[contains(@class,\"pagination\")]/form[./button[@class=\"pagination__next-prev-button next\"]]')",
- "pageE": "section.w-gl--desktop>div",
+ "nextL": "js; return fun.getNextF('//div[contains(@class,\"pagination\")]/form[last()]')",
+ "pageE": ".result,head>style[data-emotion]",
"replaceE": ".pagination"
}
},
+ "Libre Search": {
+ "host": "so.ddns-ip.net",
+ "url": "/^\\/search/",
+ "history": false,
+ "pager": {
+ "nextL": "js; return fun.getNextF('.next_page')",
+ "pageE": "#urls>[class^=template_group_], #urls>.result",
+ "replaceE": "#pagination"
+ }
+ },
"Yandex 搜索": {
"host": ["yandex.com","yandex.ru","yandex.ua","yandex.by","yandex.kz","yandex.uz","yandex.com.tr"],
"url": "/^\\/search\\//",
@@ -288,6 +290,15 @@
"replaceE": ".pagination"
}
},
+ "4get.ca 搜索": {
+ "host": "4get.ca",
+ "url": "/^\\/(web|images|videos|news|music)/",
+ "blank": 3,
+ "pager": {
+ "nextL": ".nextpage",
+ "pageE": ".text-result, .image-wrapper"
+ }
+ },
"百度贴吧 - 搜索页": {
"host": "tieba.baidu.com",
"url": "/^\\/f\\/search\\/res/",
@@ -345,9 +356,10 @@
"豆瓣 - top250/分集短评/剧评影评/在看/想看/看过/作品/图片": {
"host": ["movie.douban.com","music.douban.com","book.douban.com"],
"url": "return (fun.lp() == '/top250' || fun.indexOF(/^\\/subject\\/\\d+\\/(episode|tv_discuss|reviews|photos)/) || fun.indexOF(/^\\/people\\/.+\\/(do|wish|collect)/) || fun.indexOF(/^\\/celebrity\\/\\d+\\/(movies|photos)/))",
+ "blank": 5,
"pager": {
"nextL": "link[rel='next']",
- "pageE": ".grid_view,#comments,.review-list,.interest-list,.grid-view,.grid_view>ul>li,.poster-col3>li",
+ "pageE": ".grid_view,.article>.indent>p.ul,.article>.indent>table,#comments,.review-list,.interest-list,.grid-view,.grid_view>ul>li,.poster-col3>li",
"replaceE": ".paginator",
"scrollD": 2500
}
@@ -556,40 +568,16 @@
"煎蛋网": {
"host": "jandan.net",
"url": "/^(\\/$|\\/page\\/)/",
- "style": "#nav_prev,#nav_next,.post.f:not(.list-post)",
- "history": false,
+ "style": ".nav_prev,.nav_next,.post-item>.col-md-12,.post.f:not(.list-post)",
"pager": {
- "nextL": "//div[@class='wp-pagenavi']/a[contains(text(),'下一页') or contains(text(),'更多文章')]",
- "pageE": "#content>.list-post",
- "replaceE": ".wp-pagenavi"
+ "nextL": "//div[@class='page-navi']/a[contains(text(),'下一页') or contains(text(),'更多文章')]",
+ "pageE": ".post-list>.post-item",
+ "replaceE": ".page-navi"
},
"function": {
"bF": "return fun.src_bF(pageE)"
}
},
- "煎蛋网 - 大杂烩": {
- "host": "jandan.net",
- "url": "/^\\/dzh$/",
- "pager": {
- "type": 2,
- "nextL": ".show_more",
- "interval": 1500
- }
- },
- "煎蛋网 - 吐槽": {
- "host": "jandan.net",
- "url": "/^\\/(qa|pic|ooxx|treehole)/",
- "style": "#nav_prev,#nav_next,#tucao-gg {display: none !important;} .jandan-vote a.tucao-btn23:link {color: #c8c7cc !important;} .jandan-tucao {background-color: #fafaf9 !important;}",
- "pager": {
- "nextL": "a.previous-comment-page",
- "pageE": "ol.commentlist>li[id^='comment-'],head>script:not([src])",
- "replaceE": ".cp-pagenavi",
- "scriptT": 2
- },
- "function": {
- "bF": "fun.getAllCSS('a.tucao-btn,a.comment-like.like,a.comment-unlike.unlike').forEach(function (now) {now.className = now.className.replace('tucao-btn','tucao-btn23').replace('comment-unlike','comment-unlike23').replace('comment-like','comment-like23');}); return pageE"
- }
- },
"龙的天空": {
"host": "www.lkong.com",
"url": "fun.isUrlC(); return (fun.indexOF('/forum/'))",
@@ -654,21 +642,12 @@
}
},
"番组计划": {
- "host": ["bgm.tv","bangumi.tv"],
- "url": "return (fun.indexOF(/\\/(browser|subject_search|tag|wish)/) || fun.isPager())",
+ "host": ["bgm.tv","bangumi.tv","chii.in"],
+ "url": "return (fun.indexOF(/\\/(browser|subject_search|tag|wish|forum|comments)/) || fun.isPager())",
"blank": 3,
"pager": {
"nextL": "//div[@class='page_inner']/a[text()='››']",
- "pageE": "ul#browserItemList>li",
- "replaceE": ".page_inner"
- }
- },
- "番组计划 - 小组帖子列表": {
- "host": ["bgm.tv","bangumi.tv"],
- "url": "/\\/forum/",
- "pager": {
- "nextL": "//div[@class='page_inner']/a[text()='››']",
- "pageE": ".topic_list>tbody:last-of-type>tr.topic",
+ "pageE": "ul#browserItemList>li,.topic_list>tbody:last-of-type>tr.topic,#comment_box>.item",
"replaceE": ".page_inner"
}
},
@@ -822,6 +801,19 @@
"bF": "return fun.src_bF(pageE)"
}
},
+ "淘股吧 - 帖子内 - 只看楼主": {
+ "host": "www.tgb.cn",
+ "url": "/^\\/topic\\/lookUserTopic/",
+ "thread": true,
+ "pager": {
+ "nextL": "js; let next = fun.getXpath('//div[contains(@class,\"t_page01\")]/a[contains(text(),\"下一页\")]');if (next) {next = next.getAttribute('onclick').replace('gotoPageLookTopic(','').replace(')','').split(',');return fun.getNextUP('pageNo=',/pageNo=\\d+/,location.pathname,'2',next[1])}; return '';",
+ "pageE": ".comment-data",
+ "replaceE": ".t_page"
+ },
+ "function": {
+ "bF": "return fun.src_bF(pageE)"
+ }
+ },
"芥子空间论坛": {
"host": "bbs.lieyou888.com",
"url": "/^\\/forum/",
@@ -916,6 +908,24 @@
"replaceE": ".pagination"
}
},
+ "CPC中文印刷社区": {
+ "host": "www.cnprint.org",
+ "url": "if(fun.indexOF(/^\\/bbs\\/forumdisplay\\.php/)){rule.blank=3;return true;}else if(fun.indexOF(/^\\/bbs\\/showthread\\.php/)){return true;}",
+ "pager": {
+ "nextL": "a[rel=next]",
+ "pageE": "tbody[id^=threadbits_forum_]>tr, #posts>div[align]",
+ "replaceE": ".pagenav"
+ }
+ },
+ "Mobile01 - 论坛": {
+ "host": "www.mobile01.com",
+ "url": "if(fun.indexOF(/^\\/topicdetail\\.php/)){rule.thread=true;return true;}else if(fun.indexOF(/^\\/forumtopic\\.php/)){rule.blank=3;return true;}",
+ "pager": {
+ "nextL": ".l-pagination__page.is-active+li>a",
+ "pageE": ".l-listTable__tbody>.l-listTable__tr,.l-articlePage:not(:nth-child(2))",
+ "replaceE": ".l-pagination"
+ }
+ },
"TGFC Lifestyle": {
"host": "bbs.tgfcer.com",
"url": "return (fun.lp() == '/forumdisplay.php' || fun.indexOF('/forum'))",
@@ -936,6 +946,36 @@
"replaceE": ".pages"
}
},
+ "archlinux - bbs": {
+ "host": ["bbs.archlinux.org","bbs.archlinuxcn.org"],
+ "url": "/^\\/(viewforum|viewtopic)\\.php/",
+ "blank": 3,
+ "pager": {
+ "nextL": "a[rel=next]",
+ "pageE": "#vf tbody>tr, .blockpost[id]",
+ "replaceE": ".pagelink"
+ }
+ },
+ "archlinux - wiki": {
+ "host": ["wiki.archlinux.org","wiki.archlinuxcn.org"],
+ "url": "/^\\/wzh\\/index\\.php/",
+ "blank": 3,
+ "pager": {
+ "nextL": "a.mw-nextlink",
+ "pageE": ".mw-search-result",
+ "replaceE": ".mw-pager-navigation-bar"
+ }
+ },
+ "archlinux - aur": {
+ "host": ["archlinux.org","aur.archlinux.org"],
+ "url": "/^\\/packages/",
+ "blank": 3,
+ "pager": {
+ "nextL": ".next>a,span.page+a.page",
+ "pageE": "#pkglist-results tbody>tr",
+ "replaceE": ".pkglist-nav"
+ }
+ },
"北+": {
"host": ["/^((www|bbs)\\.)?(soul|snow|south|spring|summer|north|white|level|east)-plus\\.(net|org)$/","bbs.imoutolove.me"],
"url": "return (fun.lp() == '/thread.php' || fun.lp() == '/search.php')",
@@ -1164,7 +1204,7 @@
}
},
"nodeseek": {
- "host": "www.nodeseek.com",
+ "host": ["www.nodeseek.com","www.deepflood.com"],
"url": "return fun.isPager()",
"pager": {
"nextL": "a.pager-next",
@@ -1453,6 +1493,19 @@
"bF": "return fun.src_bF(pageE)"
}
},
+ "觅元素": {
+ "host": "www.51yuansu.com",
+ "url": "return fun.isPager()",
+ "style": "li.pic-item{max-height: 330px;width: auto;} #f-content>div{position: static !important; float: left !important; width: 285px !important;}",
+ "pager": {
+ "nextL": ".nextpage",
+ "pageE": "li.pic-item,#f-content>div",
+ "replaceE": ".pager-wrap"
+ },
+ "function": {
+ "bF": "return fun.src_bF(pageE)"
+ }
+ },
"vcg.com": {
"host": "www.vcg.com",
"url": "fun.isUrlC(); return fun.indexOF(/^\\/creative-(image|illustration)\\//)",
@@ -1977,11 +2030,22 @@
},
"CurseForge": {
"host": "www.curseforge.com",
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": ".btn-next",
+ "pageE": ".results-container>div",
+ "replaceE": ".pagination"
+ }
+ },
+ "CurseForge - legacy": {
+ "host": "legacy.curseforge.com",
+ "url": "return fun.isPager()",
+ "blank": 3,
"pager": {
"nextL": ".pagination-next>a",
"pageE": "div.my-2",
- "replaceE": ".pagination",
- "scrollD": 2500
+ "replaceE": ".pagination"
}
},
"Planet Minecraft": {
@@ -2055,6 +2119,20 @@
"replaceE": ".ajax-pager"
}
},
+ "koyso": {
+ "host": "koyso.to",
+ "url": "return fun.isPager()",
+ "style": ".skeleton",
+ "blank": 4,
+ "pager": {
+ "nextL": "js; return fun.getNextEP('.page_num[style]+a.page_num','page=',/page=\\d+/)",
+ "pageE": ".games_content",
+ "replaceE": ".pagination"
+ },
+ "function": {
+ "bF": "return fun.src_bF(pageE)"
+ }
+ },
"cs.rin.ru - 帖子列表": {
"host": "cs.rin.ru",
"url": "return (fun.lp() == '/forum/viewforum.php')",
@@ -2098,8 +2176,8 @@
"replaceE": ".post-pagination"
}
},
- "RuTracker - 帖子列表": {
- "host": ["rutracker.org","rutracker.net"],
+ "RuTracker / Pornolab - 帖子列表": {
+ "host": ["rutracker.org","rutracker.net","pornolab.net"],
"url": "/(viewforum|tracker)\\.php/",
"blank": 4,
"pager": {
@@ -2108,8 +2186,8 @@
"replaceE": "#pagination,.bottom_info>.nav"
}
},
- "RuTracker - 帖子内": {
- "host": ["rutracker.org","rutracker.net"],
+ "RuTracker / Pornolab - 帖子内": {
+ "host": ["rutracker.org","rutracker.net","pornolab.net"],
"url": "/viewtopic\\.php/",
"thread": true,
"pager": {
@@ -2138,6 +2216,16 @@
"replaceE": ".bottom-page"
}
},
+ "byrutgame": {
+ "host": "byrutgame.org",
+ "url": "if(fun.getCSS('.show_more')){rule.pager.type=2;rule.pager.nextL='.active .show_more:not(.disabled)';return true;}else{return fun.isPager();}",
+ "blank": 3,
+ "pager": {
+ "nextL": ".page_next>a",
+ "pageE": ".short_item",
+ "replaceE": ".navigation"
+ }
+ },
"steamrip": {
"host": "steamrip.com",
"url": "return fun.isPager()",
@@ -2183,6 +2271,16 @@
"pageE": "a[data-id]"
}
},
+ "SteamUnlocked": {
+ "host": "steamunlocked.org",
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": "span.page-numbers.current+a",
+ "pageE": ".cover-item.category",
+ "replaceE": ".nav-links"
+ }
+ },
"bilibili - 搜索页": {
"host": "search.bilibili.com",
"url": "fun.isUrlC(); return ((fun.lp() == '/all' || fun.lp() == '/video' || fun.lp() == '/pgc' || fun.lp() == '/article') && !fun.getCSS('ul.video-list') && !fun.getCSS('#article-list'))",
@@ -2651,7 +2749,7 @@
}
},
"YTS": {
- "host": "yts.mx",
+ "host": ["yts.bz","yts.lt","yts.gg","yts.am","yts.ag"],
"url": "/^\\/browse-movies/",
"blank": 3,
"pager": {
@@ -2731,7 +2829,7 @@
}
},
"Kickass Torrents": {
- "host": ["kickasss.to","katcr.to"],
+ "host": ["kickasss.to","katcr.to","kickasstorrent.cr"],
"url": "return (fun.lp() != '/' && !fun.indexOF('.html') && !fun.indexOF('/popular'))",
"blank": 3,
"pager": {
@@ -2750,6 +2848,16 @@
"replaceE": ".pagination"
}
},
+ "TorrentDownloads": {
+ "host": "www.torrentdownloads.pro",
+ "url": "return fun.isPager('r')",
+ "blank": 3,
+ "pager": {
+ "nextL": "//div[@class='pagination_box']//a[text()='>>']",
+ "pageE": ".inner_container>.grey_bar3",
+ "replaceE": ".pagination_box"
+ }
+ },
"LimeTorrents": {
"host": "/^www\\.limetorrents\\./",
"url": "return (fun.isTitle('LimeTorrents') && (fun.indexOF('/search/') || fun.indexOF('/browse-torrents')))",
@@ -2852,8 +2960,9 @@
"SubHD - 论坛": {
"host": ["subhd.tv","subhdtw.com","subhd.la","subhd.cc","subhd.me"],
"url": "/^\\/forum\\/(forum|ask)/",
+ "blank": 3,
"pager": {
- "nextL": "//a[@class='page-link'][text()='下一页']",
+ "nextL": ".page-item.active+li>a",
"pageE": ".bg-white.shadow-sm.rounded-3>div",
"replaceE": "nav.clearfix"
}
@@ -2861,8 +2970,9 @@
"SubHD": {
"host": ["subhd.tv","subhdtw.com","subhd.la","subhd.cc","subhd.me"],
"url": "return fun.isPager('r')",
+ "blank": 3,
"pager": {
- "nextL": "//a[@class='page-link'][text()='下一页']",
+ "nextL": ".page-item.active+li>a",
"pageE": ".bg-white.shadow-sm.rounded-3",
"insertP": ["nav.clearfix",1],
"replaceE": "nav.clearfix"
@@ -2889,7 +2999,7 @@
}
},
"字幕库 zmk": {
- "host": ["zmk.pw","zimuku.org","zimuku.pw"],
+ "host": ["srtku.com","zmk.pw","zimuku.org","zimuku.pw"],
"url": "if (!fun.indexOF('/detail/') && !fun.indexOF('/subs/')) {if (fun.lp() == '/') {fun.getCSS('.box>.table').insertAdjacentHTML('beforebegin','')}; return true;}",
"pager": {
"nextL": "a.next",
@@ -3166,6 +3276,32 @@
"bF": "return fun.src_bF(pageE)"
}
},
+ "SF漫画": {
+ "host": "manhua.sfacg.com",
+ "url": "if (fun.indexOF(/^\\/mh\\/.+\\/\\d+\\//)) {setTimeout(()=>{let _img=''; for (let i=0;i`;}; document.getElementById('curPic').parentElement.outerHTML = _img;rule.pager.scrollD = 3000;},1000); rule.pager.scrollD = -9999999; return true;}",
+ "style": ".page_turning>a[href='javascript:PrePage();'], .page_turning>a[href='javascript:NextPage();'], #pageSel, #Pages, .tucao {display: none !important;} .Reduction_left{width: auto !important;}",
+ "history": true,
+ "pager": {
+ "nextL": "js; if(nextChap != 0) {return (location.origin + '/mh/' + comicFolder + '/' + nextChap + '/');}",
+ "pageE": "#PicArea>tbody>tr>td>script",
+ "insertP": ["body",3],
+ "replaceE": ".Reduction_left",
+ "scriptT": 2,
+ "interval": 4000
+ },
+ "function": {
+ "aF": "common.getPics(c,chapId,nv,fn,function (json) {picAy = json.data;if (picAy.length == 0) {return;} else {let _img=''; for (let i=0;i`;}; fun.getCSS('#PicArea>tbody>tr>td>img').parentElement.insertAdjacentHTML('beforeend',_img);};}, function (info) {Message(info, 2);});"
+ }
+ },
+ "SF漫画 - 书库": {
+ "host": "manhua.sfacg.com",
+ "url": "return fun.isPager()",
+ "pager": {
+ "nextL": ".pagebarNext>a",
+ "pageE": "ul.Comic_Pic_List",
+ "replaceE": ".pagebar"
+ }
+ },
"快岸漫画": {
"host": "www.kanbook.net",
"url": "if (fun.indexOF(/^\\/\\d+\\/\\d+\\/\\d+/)) {if (fun.getCSS('img.img-fluid')){fun.getCSS('img.img-fluid').style.display = 'none';}; setTimeout(()=>{let _img = '';for (let i = 0; i < imagesUrlArr.length; i++) {_img += `
`;};document.querySelector('.content-wrapper').insertAdjacentHTML('beforeend',_img);},500); return true;}",
@@ -3382,7 +3518,7 @@
}
},
"古风漫画网 / 优酷漫画 / 36 漫画 / 360 漫画 / 漫漫台 / 古漫画 / 前未漫画 / 下拉式漫画 / 漫画1234 - 分类页": {
- "host": ["www.gufengmh.com","/^www\\.gufengmh\\d/","www.123gf.com","36manga.com","www.36manga.com","36manhua.com","www.36manhua.com","www.36man.cc","www.manmantai.com","www.xlsmh.com","www.gmh1234.com"],
+ "host": ["www.gufengmh.com","/^www\\.gufengmh\\d/","/^www\\.ykmh\\.[a-z]+$/","www.123gf.com","36manga.com","www.36manga.com","36manhua.com","www.36manhua.com","www.36man.cc","www.manmantai.com","www.xlsmh.com","www.gmh1234.com"],
"url": "/^\\/(comic\\/)?(update|list|search)/",
"blank": 3,
"pager": {
@@ -3392,12 +3528,12 @@
}
},
"古风漫画网 / 优酷漫画 / 36 漫画 / 360 漫画 / 漫漫台 / 古漫画 / 前未漫画 / 下拉式漫画 / 漫画1234": {
- "host": ["www.gufengmh.com","/^www\\.gufengmh\\d/","www.123gf.com","36manga.com","www.36manga.com","36manhua.com","www.36manhua.com","www.36man.cc","www.manmantai.com","www.xlsmh.com","www.gmh1234.com"],
- "url": "if (fun.indexOF(/\\/\\d+\\.html$/)) {if (/^www\\.(123gf|ykmh|izhegu|qianwee|manmantai)\\.com$/.test(location.hostname)|| location.hostname.indexOf('36man') != -1) {if (localStorage.getItem('chapterScroll') != '\"pagination\"') {localStorage.setItem('chapterScroll','\"pagination\"'); location.reload();} else {setTimeout(()=>{let _img = '',host = SinMH.getResHostDomain(); if (/^www\\.(ykmh|izhegu)\\.com$/.test(location.hostname)) {chapterPath=''}else if (location.hostname.indexOf('36man') == -1||location.hostname=='www.123gf.com'||location.hostname=='www.gmh1234.com'){host+='/'}; if (location.hostname == 'www.36man.cc' ||(location.hostname == 'www.manmantai.com' && chapterImages[0].slice(0,4) == 'http')){host=''}; for (let i=0;i`;}; document.getElementById('images').innerHTML = _img;},500); return true;}} else if (localStorage.getItem('chapterScroll') != '\"scroll\"') {localStorage.setItem('chapterScroll','\"scroll\"'); location.reload();}else{return true}}",
+ "host": ["www.gufengmh.com","/^www\\.gufengmh\\d/","/^www\\.ykmh\\.[a-z]+$/","www.123gf.com","36manga.com","www.36manga.com","36manhua.com","www.36manhua.com","www.36man.cc","www.manmantai.com","www.xlsmh.com","www.gmh1234.com"],
+ "url": "if (fun.indexOF(/\\/\\d+\\.html$/)) {if (/^www\\.(123gf|ykmh|izhegu|qianwee|manmantai)\\.[a-z]+$/.test(location.hostname)|| location.hostname.indexOf('36man') != -1) {if (localStorage.getItem('chapterScroll') != '\"pagination\"') {localStorage.setItem('chapterScroll','\"pagination\"'); location.reload();} else {setTimeout(()=>{let _img = '',host = SinMH.getResHostDomain(); if (/^www\\.(ykmh|izhegu)\\.[a-z]+$/.test(location.hostname)) {chapterPath=''}else if (location.hostname.indexOf('36man') == -1||location.hostname=='www.123gf.com'||location.hostname=='www.gmh1234.com'){host+='/'}; if (/^www\\.(ykmh)\\.[a-z]+$/.test(location.hostname) || location.hostname == 'www.36man.cc' ||(location.hostname == 'www.manmantai.com' && chapterImages[0].slice(0,4) == 'http')){host=''}; for (let i=0;i`;}; document.getElementById('images').innerHTML = _img;},500); return true;}} else if (localStorage.getItem('chapterScroll') != '\"scroll\"') {localStorage.setItem('chapterScroll','\"scroll\"'); location.reload();}else{return true}}",
"style": ".img_land_prev,.img_land_next,#sider-left,#sider-right,p.img_info,.tc,.chapter-view + .w996,.chapter-view>div[style]:not([id]):not([class]) {display: none !important;} #images{min-height: 6000px !important;} #images>img {display: inline-block !important;min-height: 400px;margin: 0 auto !important;border: none !important;padding: 0 !important;max-width: 99% !important;height: auto !important;}",
"history": true,
"pager": {
- "nextL": "js; let url = comicUrl.replace('.html','/') + nextChapterData.id + '.html'; if (nextChapterData.id != null && url && url != '.html' && url != location.href) return url",
+ "nextL": "js; let url = comicUrl.replace('.html','/').replace('http://',location.protocol+'//') + nextChapterData.id + '.html'; if (nextChapterData.id != null && url && url != '.html' && url != location.href) return url",
"pageE": "//script[contains(text(),'chapterImages')]",
"insertP": ["body",3],
"scriptT": 2,
@@ -3405,7 +3541,7 @@
"scrollD": 4000
},
"function": {
- "aF": "let _img = '',host = SinMH.getResHostDomain(); if (/^www\\.(ykmh|100fanwo|izhegu|xlsmh)\\.com$/.test(location.hostname)) {chapterPath=''}else if (location.hostname.indexOf('36man') == -1||location.hostname=='www.123gf.com'||location.hostname=='www.gmh1234.com'){host+='/'}; if (location.hostname == 'www.36man.cc' ||(location.hostname == 'www.manmantai.com' && chapterImages[0].slice(0,4) == 'http') ||location.hostname == 'www.xlsmh.com'){host=''}; for (let i=0;i`;}; document.getElementById('images').insertAdjacentHTML('beforeend',_img);"
+ "aF": "let _img = '',host = SinMH.getResHostDomain(); if (/^www\\.(ykmh|100fanwo|izhegu|xlsmh)\\.[a-z]+$/.test(location.hostname)) {chapterPath=''}else if (location.hostname.indexOf('36man') == -1||location.hostname=='www.123gf.com'||location.hostname=='www.gmh1234.com'){host+='/'}; if (/^www\\.(ykmh)\\.[a-z]+$/.test(location.hostname) || location.hostname == 'www.36man.cc' ||(location.hostname == 'www.manmantai.com' && chapterImages[0].slice(0,4) == 'http') ||location.hostname == 'www.xlsmh.com'){host=''}; for (let i=0;i`;}; document.getElementById('images').insertAdjacentHTML('beforeend',_img);"
}
},
"爱漫之家 / 733 动漫": {
@@ -3461,6 +3597,28 @@
"replaceE": ".pagination"
}
},
+ "G站漫画": {
+ "host": ["manhuafree.com","manhuascans.org"],
+ "url": "return fun.isPager('n')",
+ "pager": {
+ "type": 6,
+ "nextL": "#nextChapterLink",
+ "pageE": "#chapcontent>div",
+ "replaceE": "#nextChapterLink,#preChapterLink",
+ "loadTime": 1000,
+ "scrollD": 4000
+ }
+ },
+ "G站漫画 - 分类页": {
+ "host": ["manhuafree.com","manhuascans.org"],
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": "a[aria-label^=下]",
+ "pageE": ".cardlist>div",
+ "replaceE": ".cardlist+div"
+ }
+ },
"COLAMANGA 漫画": {
"host": "www.colamanga.com",
"url": "if (fun.indexOF('.html')){if (!(fun.getCookie('mh_readmode') === '' || fun.getCookie('mh_readmode') === '3')) {document.cookie='mh_readmode=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/'; location.reload();}; return true;} else if (fun.indexOF(/\\/\\d+\\/$/)) {setTimeout(()=>{if (document.querySelector('a.website-display-all')) document.querySelector('a.website-display-all').click();},500);}",
@@ -3558,6 +3716,16 @@
"replaceE": ".pagination"
}
},
+ "起点图数据 - 书单": {
+ "host": "www.qidiantu.com",
+ "url": "/^\\/booklist\\/\\d+/",
+ "blank": 3,
+ "pager": {
+ "nextL": "//a[@class='btn btn-primary'][text()='后十本'][1]",
+ "pageE": ".well.well-sm.table-responsive",
+ "replaceE": "//a[@class='btn btn-primary'][text()='后十本'][1]"
+ }
+ },
"七猫中文 - 阅读页": {
"host": "www.qimao.com",
"url": "return (fun.indexOF(/\\/shuku\\/\\d+-\\d+\\//) || fun.indexOF('/reader/index/'))",
@@ -3783,6 +3951,28 @@
"replaceE": ".prenext,.page"
}
},
+ "爱下电子书": {
+ "host": "ixdzs8.com",
+ "url": "/^\\/read\\/.+\\.html$/",
+ "pager": {
+ "nextL": ".chapter-next",
+ "pageE": ".page-content>section",
+ "replaceE": "chapter-act"
+ }
+ },
+ "飘天文学": {
+ "host": "www.piaotia.com",
+ "url": "/^\\/html\\/\\d+\\/\\d+\\/\\d+\\.html",
+ "style": "#content>*:not(br):not(:nth-child(1))",
+ "pager": {
+ "type": 6,
+ "nextL": "(//a[contains(text(), '下一章')])[last()]",
+ "pageE": "#content",
+ "insertP": ["#content",6],
+ "replaceE": ".bottomlink",
+ "loadTime": 500
+ }
+ },
"皇帝之家": {
"host": "www.huangdizhijia.com",
"url": "/chapter-\\d+\\.html/",
@@ -3827,15 +4017,17 @@
},
"哔哩轻小说": {
"host": "www.linovelib.com",
- "url": "return fun.indexOF(/\\/novel\\/\\d+\\/.+\\.html/)",
+ "url": "if (fun.indexOF(/\\/novel\\/\\d+\\/.+\\.html/)){setTimeout(()=>{let ac=fun.getCSS('#TextContent');if(ac){ac.classList.add('a123456');ac.classList.remove('adv-box');ac.style='display: block !important;';let ax=fun.getXpath(\"//head/style[not(@type)][normalize-space()='']\");document.head.appendChild(document.createElement('style')).textContent = Array.from(ax.sheet.cssRules).map(r => {return r.cssText;}).join(' ').replaceAll('#TextContent ','.a123456#TextContent ');ax.remove();}},300);return true;}",
"history": true,
"pager": {
+ "type": 6,
"nextL": "//div[@class='mlfy_page']/a[contains(text(),'下一页') or contains(text(),'下一章')]",
- "pageE": "#TextContent>*:not(div),head>style",
- "replaceE": ".mlfy_page"
+ "pageE": "//div[@id='TextContent'] | //head/style[not(@type)][normalize-space()='']",
+ "replaceE": ".mlfy_page",
+ "loadTime": 1000
},
"function": {
- "bF": "if(pageE[0].tagName=='STYLE'){pageE[pageE.length-1].style='font-family: read !important;';pageE[0].textContent=pageE[0].textContent.replace(' p:last-of-type','666')}; return pageE",
+ "bF": "const ra='a'+Math.random().toString(36).slice(-6);pageE.forEach(function (a) {if(a.tagName=='STYLE'){a.textContent=Array.from(a.sheet.cssRules).map(r => {return r.cssText;}).join(' ').replaceAll('#TextContent ','.'+ra+'#TextContent ');}else if(a.tagName=='DIV'){a.classList.add(ra);a.classList.remove('adv-box');a.style='display: block !important;'};}); return pageE",
"aF": "document.body.appendChild(document.createElement('script')).textContent='yuedu()'"
}
},
@@ -3865,15 +4057,17 @@
},
"哔哩轻小说 - 手机版": {
"host": "www.bilinovel.com",
- "url": "/\\/novel\\/\\d+\\/.+\\.html/",
+ "url": "if (fun.indexOF(/\\/novel\\/\\d+\\/.+\\.html/)){setTimeout(()=>{let ac=fun.getCSS('#acontent');if(ac){ac.classList.add('a123456');ac.classList.remove('adv-box');ac.style='display: block !important;';let ax=fun.getXpath(\"//head/style[not(@type)][normalize-space()='']\");document.head.appendChild(document.createElement('style')).textContent = Array.from(ax.sheet.cssRules).map(r => {return r.cssText;}).join(' ').replaceAll('#acontent ','.a123456#acontent ');ax.remove();}},300);return true;}",
"history": true,
"pager": {
+ "type": 6,
"nextL": "js; if (ReadParams.url_next.slice(ReadParams.url_next.length-5) === '.html') return (location.origin + ReadParams.url_next)",
- "pageE": "id('acontent')/*[name()='p' or name()='img' or name()='br'] | //body/script[contains(text(),'var ReadParams')] | //body/script[contains(@src,'/readtools.js')] | //head/style",
- "scriptT": 2
+ "pageE": "//div[@id='acontent'] | //body/script[contains(text(),'var ReadParams')] | //head/style[not(@type)][normalize-space()='']",
+ "scriptT": 2,
+ "loadTime": 1000
},
"function": {
- "bF": "if(pageE[0].tagName=='STYLE'){pageE[pageE.length-2].style='font-family: read !important;';pageE[0].textContent=pageE[0].textContent.replace(' p:last-of-type','666')}; return pageE"
+ "bF": "const ra='a'+Math.random().toString(36).slice(-6);pageE.forEach(function (a) {if(a.tagName=='STYLE'){a.textContent=Array.from(a.sheet.cssRules).map(r => {return r.cssText;}).join(' ').replaceAll('#acontent ','.'+ra+'#acontent ');}else if(a.tagName=='DIV'){a.classList.add(ra);a.classList.remove('adv-box');a.style='display: block !important;'};}); return pageE"
}
},
"哔哩轻小说 - 手机版 - 文库": {
@@ -3888,6 +4082,36 @@
"bF": "return fun.src_bF(pageE)"
}
},
+ "刺猬猫阅读": {
+ "host": "www.ciweimao.com",
+ "url": "/^\\/chapter\\/\\d+/",
+ "pager": {
+ "type": 6,
+ "nextL": "#J_BtnPageNext",
+ "pageE": "#J_BookRead>p",
+ "replaceE": ".book-read-page",
+ "loadTime": 1000
+ }
+ },
+ "SF轻小说": {
+ "host": "book.sfacg.com",
+ "url": "/^\\/Novel\\/\\d+\\/\\d+\\/\\d+\\//",
+ "pager": {
+ "nextL": "//div[@class='fn-btn']/a[text()='下一章']",
+ "pageE": "#ChapterBody>p",
+ "replaceE": "#article>.fn-btn"
+ }
+ },
+ "SF轻小说 - 书库": {
+ "host": "book.sfacg.com",
+ "url": "/^\\/List\\//",
+ "pager": {
+ "nextL": ".pagebarNext>a",
+ "pageE": ".Comic_Pic_List",
+ "replaceE": ".pagebar",
+ "forceHTTPS": true
+ }
+ },
"必读推荐": {
"host": "www.bidutuijian.com",
"url": "/^\\/books\\/.+\\/(?:(?!0000)\\d{4})\\.html/",
@@ -3960,6 +4184,17 @@
"replaceE": ".pager"
}
},
+ "八叉书库": {
+ "host": "www.8xsk.xyz",
+ "url": "/^\\/novel\\d+\\/chapter/",
+ "pager": {
+ "type": 6,
+ "nextL": "#next_chap",
+ "pageE": "#chapter-content",
+ "replaceE": ".chapter-nav",
+ "loadTime": 1000
+ }
+ },
"蓝鲨": {
"host": "www.lan-sha.com",
"url": "return (!fun.indexOF('.html'))",
@@ -4837,11 +5072,20 @@
"replaceE": ".pagination"
}
},
+ "Github - Issue/Discussions/Pull - loadmore": {
+ "host": "github.com",
+ "url": "return fun.indexOF(/\\/(issues|discussions|pull)\\/\\d+$/)",
+ "pager": {
+ "type": 2,
+ "nextL": "button[data-testid=issue-timeline-load-more-load-top][aria-disabled=false], button.ajax-pagination-btn[data-disable-with=Loading…]:not([disabled])",
+ "scrollD": 9999
+ }
+ },
"Github - Issues": {
"host": "github.com",
"url": "return fun.indexOF(/\\/issues$/)",
"style": "[class*='IssueItem-module__ListItem_'] div[class*=LoadingSkeleton]",
- "blank": 4,
+ "blank": 6,
"pager": {
"nextL": "js; return fun.getNextUP('page=',/page=\\d+/,fun.lp(),'2',fun.getXpath('//a[@rel=\\'next\\'][not(@aria-disabled)]/preceding-sibling::a[1][not(@aria-current)]').textContent)",
"pageE": "div[class^='IssueRow-module_']",
@@ -4855,7 +5099,7 @@
"blank": 4,
"pager": {
"nextL": "a[data-testid=pagination-next-button]:not([aria-disabled])",
- "pageE": "div[class^='prc-Timeline-Timeline-']>div>div"
+ "pageE": "div[class^='prc-Timeline-Timeline-']>div"
}
},
"Github - Tags": {
@@ -5000,6 +5244,17 @@
"pageE": ".column-list>li"
}
},
+ "Chiphell": {
+ "host": "www.chiphell.com",
+ "url": "/^\\/(article-|portal\\.php)/",
+ "pager": {
+ "type": 3,
+ "nextL": ".nxt",
+ "pageE": "td#article_content,.bm_c.xld>dl",
+ "insertP": ["td#article_content,.bm_c.xld",6],
+ "replaceE": ".pg"
+ }
+ },
"致美化": {
"host": "zhutix.com",
"url": "return fun.isPager('p')",
@@ -5194,7 +5449,7 @@
"pager": {
"type": 6,
"nextL": ".a-selected+li.a-normal>a",
- "pageE": "#gridItemRoot",
+ "pageE": ".a-ordered-list>li.zg-no-numbers",
"replaceE": ".a-pagination",
"loadTime": 7000,
"scrollD": 1000
@@ -5292,7 +5547,7 @@
}
},
"kmoe": {
- "host": ["mox.moe","kox.moe","kxo.moe","koz.moe"],
+ "host": ["mox.moe","kox.moe","kxo.moe","koz.moe","kxx.moe","kzz.moe"],
"url": "return fun.isPager()",
"blank": 3,
"pager": {
@@ -5367,6 +5622,17 @@
"replaceE": ".pg_pointer"
}
},
+ "哲风壁纸": {
+ "host": "haowallpaper.com",
+ "url": "/^\\/(homeView|mobileView)($|\\?)/",
+ "blank": 3,
+ "pager": {
+ "type": 6,
+ "nextL": "js; return fun.getNextEP('.page-content>.current+.isDefault','page=',/page=\\d+/)",
+ "pageE": "#main-content .card",
+ "replaceE": ".page-main"
+ }
+ },
"Anime Pictures": {
"host": "anime-pictures.net",
"url": "return (fun.indexOF('/pictures/') && !fun.indexOF('/view_post/'))",
@@ -5546,6 +5812,16 @@
"replaceE": ".pagination"
}
},
+ "中国科普博览 - 科学大院": {
+ "host": "www.kepu.net.cn",
+ "url": "/^\\/dayuan\\//",
+ "pager": {
+ "type": 6,
+ "nextL": ".text_align_center.mt50>span+a",
+ "pageE": ".dy>li",
+ "replaceE": ".text_align_center.mt50"
+ }
+ },
"学佛网": {
"host": "www.xuefo.tw",
"pager": {
@@ -5691,8 +5967,18 @@
"replaceE": "#paging"
}
},
+ "91pron.men": {
+ "host": ["91pron.men","/^.+\\.(yennew\\.com|scvhuen\\.click|bbbsss\\.org)$/"],
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": "span[aria-current]+a",
+ "pageE": ".grid.grid-cols-2.md\\:grid-cols-3.xl\\:grid-cols-4.gap-5>div",
+ "replaceE": "//span[@aria-current]/../../.."
+ }
+ },
"xHamster": {
- "host": ["/^[a-z]{2}\\.xhamster\\.com$/","/^[a-z]{2}\\..*(xh).*\\.[a-z]{2,}$/"],
+ "host": ["xhamster.com","/^[a-z]{2}\\.xhamster\\.com$/","/^[a-z]{2}\\..*(xh).*\\.[a-z]{2,}$/"],
"url": "return ((fun.isTitle('xHamster') || fun.getCSS('meta[name=application-name][content=xHamster]')) && !fun.indexOF('/videos/') && !fun.indexOF('/photos/gallery'))",
"blank": 3,
"pager": {
@@ -5786,6 +6072,26 @@
"replaceE": ".pages"
}
},
+ "M系镜像": {
+ "host": "mirror.chromaso.net",
+ "url": "if(fun.indexOF(/^\\/thread\\/.+/)){rule.thread=true;rule.pager.pageE='.container>.mm-post';return true;}else if(fun.indexOF(/^\\/(forum|search)\\/.+/)){rule.blank=3;return true;}",
+ "pager": {
+ "nextL": ".pagination>.active+li>a",
+ "pageE": "#thread-table-main>tbody>tr",
+ "replaceE": ".pagination"
+ }
+ },
+ "肉视频": {
+ "host": ["rou.video","rouva2.xyz"],
+ "url": "/^\\/(t\\/|(v|search)($|\\?))/",
+ "style": ".grid>div[data-slot=card]+div:not([data-slot=card])",
+ "blank": 3,
+ "pager": {
+ "nextL": "a[aria-current=page]+a",
+ "pageE": ".grid>div[data-slot=card]",
+ "replaceE": "//nav[@aria-label='Pagination']/../.."
+ }
+ },
"Latino Hentai": {
"host": "latinohentai.com",
"url": "return (!fun.indexOF('/ver/'))",
@@ -5806,6 +6112,15 @@
"replaceE": ".navigation"
}
},
+ "underhentai": {
+ "host": "www.underhentai.net",
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": "span.page-num.active+a.page-num",
+ "pageE": "article.data-block"
+ }
+ },
"Avbebe": {
"host": "avbebe.com",
"url": "return (!fun.indexOF(/^\\/archives\\/\\d/))",
@@ -5831,15 +6146,36 @@
"url": "if((fun.indexOF(/^\\/dm\\d+\\//) || fun.indexOF('/search/') || fun.indexOF(/\\/\\(actresses|actors|genres|series|makers|directors\\)\\//)) && fun.isPager('n')){if(fun.isMobile()){rule.blank=0;};return true;}",
"blank": 3,
"pager": {
+ "type": 3,
"nextL": "a[rel=next]",
"pageE": "div[x-init*=initLozad]>div",
- "replaceE": "//span[@aria-current='page']/..",
- "scrollD": 1000
+ "replaceE": "//span[@aria-current='page']/../../..",
+ "scrollD": 500
},
"function": {
"bF": "return fun.src_bF(pageE)"
}
},
+ "123av": {
+ "host": ["/^123av\\.[a-z]+$/","/^1av\\.[a-z]+$/"],
+ "url": "return fun.isPager()",
+ "pager": {
+ "nextL": "a[rel=next]",
+ "pageE": ".box-item-list>div, body>script[src*='app.js']",
+ "replaceE": ".pagination",
+ "scriptT": 2
+ }
+ },
+ "javxx": {
+ "host": "javxx.com",
+ "url": "fun.isUrlC();return (!fun.indexOF(/^\\/[a-z]+\\/v\\//) && !fun.indexOF(/^\\/[a-z]+$/))",
+ "blank": 3,
+ "pager": {
+ "nextL": ".page-item.active+li>a",
+ "pageE": ".vid-items>.item",
+ "replaceE": "ul.pagination"
+ }
+ },
"av6k.org": {
"host": "/^([0-9a-z-]+\\.)?av6k([0-9a-z]+)?\\.[a-z]+$/",
"url": "fun.insStyle('.clickadu,.clickadulist,#footer,.links,.links-top,.links-top2,.links-top3,a[href^=\\'http://\\'],.footlink,body>div[id][style],#shareQrcode');if(fun.isTitle('AV6K') && fun.lp() !== '/' && fun.getAllCSS('.pages_c').length === 2)return fun.isPager()",
@@ -5890,6 +6226,9 @@
"nextL": "js; let next = fun.getXpath(\"//li[@class='page-item' and ./span[contains(@class,'active')]]/following-sibling::li/a\"); if (next) {return `${location.origin}${location.pathname}?mode=async&function=get_block&block_id=${next.dataset.blockId}&${next.dataset.parameters.replace('from_videos+','from_videos=' + next.textContent + '&').replaceAll(':','=').replaceAll(';','&').replaceAll('+','&')}&_=${+new Date()}`;}",
"pageE": "section>.row",
"replaceE": ".pagination"
+ },
+ "function": {
+ "aF": "const newItems = fun.getAll('img[data-preview]:not(.preview-initialized)'); newItems.forEach(item => item.classList.add('preview-initialized')); $(newItems).videopreview();"
}
},
"JavDisk": {
@@ -5918,6 +6257,16 @@
"bF": "return fun.src_bF(pageE)"
}
},
+ "JAV吧 JAV8": {
+ "host": ["jav98.xyz","/^jav8\\.[a-z]+$/"],
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": ".pagination-next",
+ "pageE": "a.work",
+ "replaceE": ".pagination"
+ }
+ },
"JieAV": {
"host": ["www.jieav.com","www.qinav.com","www.qinimg.com","www.yinmh.com","www.txtxi.com","www.dnaav.com","www.jiedm.com","www.ruav.xyz","www.feiav.com"],
"url": "return fun.isPager('r')",
@@ -5953,12 +6302,12 @@
},
"Netflav": {
"host": "netflav.com",
- "url": "return (fun.lp() != '/' && !fun.indexOF(/^\\/(video|actress|browse|genre)$/))",
+ "url": "fun.isUrlC(); return (fun.lp() != '/' && !fun.indexOF(/^\\/(video|actress|browse|genre)$/))",
"blank": 3,
"pager": {
"type": 6,
"nextL": "js; return fun.getNextEP('a.active.item+a.item:not(.icon)','page=',/page=\\d+/)",
- "pageE": ".grid_cell",
+ "pageE": ".grid_0_cell",
"replaceE": ".pagination",
"loadTime": 1200,
"scrollD": 3000
@@ -6130,6 +6479,16 @@
"replaceE": ".pages"
}
},
+ "caribbeancom": {
+ "host": ["www.caribbeancom.com","en.caribbeancom.com"],
+ "url": "return (fun.isPager()|fun.indexOF(/\\/(listpages|search)\\//))",
+ "blank": 3,
+ "pager": {
+ "nextL": "a[rel=next]",
+ "pageE": ".list>.flex-grid>.grid-item, .grid.is-movie>.entry",
+ "replaceE": ".pagination"
+ }
+ },
"16k.club": {
"host": "www.16k.club",
"url": "return fun.isPager()",
@@ -6313,8 +6672,8 @@
}
},
"禁漫天堂": {
- "host": ["18comic.vip","18comic.org","/^jm-?comic[0-9]?\\.[a-z]+$/"],
- "url": "if (fun.indexOF(/^\\/photo\\//)){fun.src_bF(fun.getAllCSS('.scramble-page'),[0,'img[data-original]:not(.lazy-loaded)','data-original']); setTimeout(()=>{document.body.appendChild(document.createElement('script')).textContent = `var old_onImageLoaded = onImageLoaded; onImageLoaded = function(e){aid = parseInt(/photos\\\\/\\\\d+/.exec(e.src)[0].replace('photos/','')); if(aid>scramble_id){old_onImageLoaded(e);}}`},3000); return true}",
+ "host": ["18comic.vip","18comic.org","/^jmcomic-zzz.[a-z]+$/","/^18comic-[a-z]+.[a-z]+$/","/^jm-?comic[0-9]?\\.[a-z]+$/"],
+ "url": "if (fun.indexOF(/^\\/photo\\//)){setTimeout(()=>{document.body.appendChild(document.createElement('script')).textContent = `var old_onImageLoaded = onImageLoaded; onImageLoaded = function(e){aid = parseInt(/photos\\\\/\\\\d+/.exec(e.src)[0].replace('photos/','')); if(aid>scramble_id){old_onImageLoaded(e);}}`; fun.src_bF(fun.getAllCSS('.scramble-page'),[0,'img[data-original]:not(.lazy-loaded)','data-original']);},3000); return true}",
"style": "[data-group],div[data-page],.thumb-overlay-albums>*:not(.scramble-page):not(.scramble-page1) {display: none !important;} #Comic_Top_Nav[style*='display: block'] {opacity: 0.3;}",
"history": true,
"pager": {
@@ -6329,7 +6688,7 @@
}
},
"禁漫天堂 - 分类页": {
- "host": ["18comic.vip","18comic.org","/^jm-?comic[0-9]?\\.[a-z]+$/"],
+ "host": ["18comic.vip","18comic.org","/^jmcomic-zzz.[a-z]+$/","/^18comic-[a-z]+.[a-z]+$/","/^jm-?comic[0-9]?\\.[a-z]+$/"],
"url": "/^\\/(albums|search|blogs|videos|movies)/",
"style": ".row>[style='z-index: 0;'],.col-lg-3.col-md-3.col-sm-3.col-xs-6",
"blank": 3,
@@ -6515,6 +6874,16 @@
"loadTime": 500
}
},
+ "xxxclub": {
+ "host": "xxxclub.to",
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": ".browsepagination>a:not(.page-link)",
+ "pageE": ".browsetableinside>ul>li:not(:first-child)",
+ "replaceE": ".browsepagination"
+ }
+ },
"Orzqwq": {
"host": "orzqwq.com",
"url": "if(fun.indexOF(/\\/p\\/\\d\\/$/)){let t = setInterval(()=>{if(typeof chapter_preloaded_images !== 'undefined'){let _img=''; for (let i=0;i<=chapter_preloaded_images.length;i++){_img += `
`;}; document.querySelector('.reading-content').innerHTML = _img;clearInterval(t);}},500); return true;}",
@@ -6588,6 +6957,7 @@
"Danbooru": {
"host": ["danbooru.donmai.us","e621.net"],
"url": "return (fun.lp() == '/' || fun.lp() == '/posts')",
+ "style": ".post-preview:not(.blacklist-initialized),.image-container:not(.blacklist-initialized){visibility: initial !important;}",
"blank": 3,
"pager": {
"nextL": "a[rel='next']",
@@ -6607,19 +6977,39 @@
"loadTime": 1000
}
},
+ "BepisDB": {
+ "host": "db.bepis.moe",
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": ".page-item.active+li>a",
+ "pageE": "#inner-card-body>div",
+ "replaceE": ".pagination"
+ }
+ },
"xchina.co": {
"host": ["xchina.co","/^xchina\\.[a-z]+$/","crxs.me","litu100.xyz","8se.me","shise.me"],
"url": "return fun.isPager()",
- "style": ".quickGuide,.outer-banner,.item[class*=exoclick],.photos>div,.media,.static-container-4,.static-container-5,.recommendation_widget",
+ "style": ".quickGuide,.outer-banner,.item[class*=exoclick],.item[class=item],.photos>div,.media,.static-container-4,.static-container-5,.recommendation_widget",
"pager": {
"type": 3,
"nextL": "a.next",
- "pageE": ".videos>div.item:not([class*=exoclick]), .videos>.video, .list>div.item:not([class*=exoclick]), .photos>a, .fiction-body>.content>p, .fiction-body>.content>.chapters, .lists>a, .comic>div:not([class])",
+ "pageE": ".videos>div.item:not([class*=exoclick]):not([class=item]), .videos>.video, .list>div.item:not([class*=exoclick]):not([class=item]), .photos>a, .fiction-body>.content>p, .fiction-body>.content>.chapters, .lists>a, .comic>div:not([class])",
"replaceE": ".pager,.prevNext",
"scrollE": ".pager+div+.pager,.prevNext",
"scrollD": 1000
}
},
+ "西斯新聞": {
+ "host": "sexynews.gamme.com.tw",
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": ".navi-next",
+ "pageE": ".List-4",
+ "replaceE": ".navi-pages"
+ }
+ },
"Hentai Foundry": {
"host": "www.hentai-foundry.com",
"url": "return (fun.lp() != '/' && fun.isPager('p'))",
@@ -6709,7 +7099,7 @@
}
},
"绅士漫画": {
- "host": ["/^(www\\.)?(wnacg|htcomic)\\.[a-z]+$/","/^(www\\.)?(qy|wn)\\d+\\.[a-z]+$/"],
+ "host": ["/^(www\\.)?(wnacg|htcomic)(\\d+)?\\.[a-z]+$/","/^(www\\.)?(qy|wn)\\d+\\.[a-z]+$/"],
"url": "/^\\/(albums|search|photos-index)/",
"style": "a.btn[href^='/photos-slide-']{color:#fff !important;background:#ff604a !important;font-weight:bold !important;font-size:22px !important;letter-spacing:10px !important;width:210px !important;height:30px !important;}",
"blank": 3,
@@ -6720,7 +7110,7 @@
}
},
"绅士漫画 - 阅读页(非下拉阅读)": {
- "host": ["/^(www\\.)?(wnacg|htcomic)\\.[a-z]+$/","/^(www\\.)?(qy|wn)\\d+\\.[a-z]+$/"],
+ "host": ["/^(www\\.)?(wnacg|htcomic)(\\d+)?\\.[a-z]+$/","/^(www\\.)?(qy|wn)\\d+\\.[a-z]+$/"],
"url": "if(fun.indexOF(/^\\/photos-view-id-\\d+\\.html/) || fun.indexOF('?ctl=photos&act=view&id=','s')){const img=fun.getCSS('#picarea');img.parentElement.outerHTML=img.outerHTML;return true;}",
"style": "#tuzaoblock,#bodywrap,.tocaowrap",
"pager": {
@@ -6729,6 +7119,25 @@
"replaceE": ".newpagewrap"
}
},
+ "巴卡漫画": {
+ "host": ["bakamh.com","bakamh.ru","/^baka\\d\\.[a-z]+$/"],
+ "url": "/^\\/manga\\/.+\\/c-/",
+ "pager": {
+ "nextL": ".nav-next>a",
+ "pageE": ".reading-content>.page-break",
+ "replaceE": ".select-pagination,.select-view"
+ }
+ },
+ "巴卡漫画 - 列表页": {
+ "host": ["bakamh.com","bakamh.ru","/^baka\\d\\.[a-z]+$/"],
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": "a.nextpostslink",
+ "pageE": "#loop-content>.page-listing-item",
+ "replaceE": ".wp-pagenavi"
+ }
+ },
"鸟鸟韩漫": {
"host": ["/^nnhanman\\.[a-z]+/","/^nnhanman\\d\\.com/","/^nnhm\\d\\.[a-z]+/"],
"url": "/^\\/comic\\/.+\\/chapter-\\d+\\.html/",
@@ -6760,6 +7169,19 @@
"replaceE": "nav[role=navigation]"
}
},
+ "fulitu.cc": {
+ "host": "www.fulitu.cc",
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": ".next>a",
+ "pageE": "#masonry>.item",
+ "replaceE": ".page-navigator"
+ },
+ "function": {
+ "bF": "return fun.src_bF(pageE)"
+ }
+ },
"xiutaku": {
"host": "xiutaku.com",
"url": "return fun.isPager()",
@@ -6832,6 +7254,23 @@
"bF": "return fun.src_bF(pageE)"
}
},
+ "chottie": {
+ "host": "chottie.com",
+ "url": "if (fun.indexOF(/^\\/blog\\/archives/)){fun.insStyle('div[pagetotal]>div>div {display: block !important;} a>.v-image {width: auto !important;}');setTimeout(()=>{fun.getCSS('.v-btn-toggle>button:last-of-type').click();},1000)}"
+ },
+ "XiuRenBox": {
+ "host": "www.xiurenbox.com",
+ "url": "return fun.isPager()",
+ "style": ".page-click-zone",
+ "pager": {
+ "nextL": ".next",
+ "pageE": ".wp-block-image>img",
+ "replaceE": ".simple-page-nav"
+ },
+ "function": {
+ "bF": "return fun.src_bF(pageE, [0,'img[data-lazy-src]','data-lazy-src'])"
+ }
+ },
"MrCong": {
"host": "mrcong.com",
"pager": {
@@ -6867,6 +7306,20 @@
"bF": "return fun.src_bF(pageE)"
}
},
+ "74P福利社": {
+ "host": "www.74p.net",
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "type": 3,
+ "nextL": "a.next.page-numbers",
+ "pageE": "#image_div>p>img,#index_ajax_list>li",
+ "replaceE": ".nav-links"
+ },
+ "function": {
+ "bF": "return fun.src_bF(pageE)"
+ }
+ },
"美图乐": {
"host": "meitulu.cc",
"url": "return fun.isPager()",
@@ -7212,6 +7665,19 @@
"replaceE": "#d_list_page,#d_list_foot,table.dc_bar"
}
},
+ "Theav": {
+ "host": ["theavporn.com","the01.fun","/^theav\\d{3}\\.com/","/^thepa\\d{2}\\.xyz$/","/^tav\\d{3}\\.xyz$/"],
+ "url": "return fun.isPager()",
+ "blank": 3,
+ "pager": {
+ "nextL": ".pagination>.item.active+div[class=item]>a",
+ "pageE": ".thumbs>.thumb",
+ "replaceE": ".pagination"
+ },
+ "function": {
+ "bF": "return fun.src_bF(pageE)"
+ }
+ },
"taotuxp.com": {
"host": "www.taotuxp.com",
"url": "/^\\/\\d+\\.html/",
@@ -7221,6 +7687,16 @@
"replaceE": ".pagelist"
}
},
+ "4khd.com": {
+ "host": ["4khd.com","www.4khd.com","/^(.+)\\.xxtt\\.ink$/","/^(.+)\\.uuss\\.uk$/"],
+ "url": "/^\\/content\\//",
+ "pager": {
+ "type": 3,
+ "nextL": ".numpages.current+li>a",
+ "pageE": "#basicExample>a",
+ "replaceE": ".page-links"
+ }
+ },
"俊美图": {
"host": "www.meijuntu.com",
"url": "return fun.isPager('r')",
@@ -7232,6 +7708,15 @@
"replaceE": ".pages"
}
},
+ "愛麗絲書屋 - 分类/搜索": {
+ "host": ["www.alicesw.com","www.alicesw.tw","/^(.+)\\.(alicesw2|als1006)\\.([a-z]+)$/"],
+ "url": "/^\\/(lists|search\\.html)/",
+ "pager": {
+ "nextL": ".layui-laypage-next,.active+li>a",
+ "pageE": ".list-group-item,.rec_rullist>ul,ul.txt-list>li",
+ "replaceE": ".pagination,.pager"
+ }
+ },
"黑料网": {
"host": ["18hlw.com","www.hlwxx.com","/.*/"],
"url": "return (!fun.indexOF('/archives/') && fun.isTitle('黑料网') && fun.isPager())",