diff --git a/.github/ISSUE_TEMPLATE/03-autoPageRequest.yml b/.github/ISSUE_TEMPLATE/03-autoPageRequest.yml index ec1f4a675..e27a94a98 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. 请提供希望添加支持的 **`可翻页(含有页码)的具体网页地址`** 以供我编写规则(特别是**页面很多的网站**),尽量减少我的工作量,否则可能拒绝。 + > 4. 对于 **`正版小说/漫画`** 网站,因为**反爬防盗**的原因也会导致无法制作规则(该脚本本质上也是爬虫,虽然只爬取下一页,但也会被阻碍)。 + > 5. 对于 **`没有 HTTPS`** 的网站(这种网站目前全网占比极少,且大都是一些老旧网站),是不考虑添加支持的。 + > 6. 如果你要申请对 `某个博客/论坛系统` 添加支持(即通用规则,所有使用这个博客/论坛系统的网站都会支持),那么需要提供 `官方博客/论坛地址` 及 其他**几个使用该博客/论坛系统的网站地址**,用于对比、验证,才能写出通用规则。 - > - 另外,对于**正版小说/漫画**网站,因为反爬防盗的原因也会导致无法制作规则(该脚本本质上也是爬虫,虽然只爬取下一页)。 - > - 另外,对于**没有 HTTPS** 的网站(这种网站目前全网占比极少,且大都是一些老旧网站),是不考虑添加支持。 - > - 另外,如果你要申请脚本对 `某个博客/论坛系统` 添加支持(即通用规则,所有使用这个博客/论坛系统的网站都会支持),那么需要提供 `官方博客/论坛地址` 及 其他**几个使用该博客/论坛系统的网站地址**,用于对比、验证,才能写出通用规则。 + > - 对于需要登录才能看的网页,哪怕注册再简单我也不会去主动注册,你可以用一些 **`阅后即焚`** 的网站来告诉我你的账号密码(毕竟 Github 没有私信功能,你可以提前把密码改成别的,我用完了你再改回去),也可以用各种 **`在线临时邮箱`** 网站随便申请个账号给我用,但不管如何你必须提供一个账号给我才能编写规则,这是基本原则。 **** - type: input id: websitename diff --git a/Autopage.user.js b/Autopage.user.js index 3b7ef67df..7062dbdb2 100644 --- a/Autopage.user.js +++ b/Autopage.user.js @@ -1,39 +1,36 @@ // ==UserScript== -// @name 自动无缝翻页 +// @name AutoPager // @name:zh-CN 自动无缝翻页 // @name:zh-TW 自動無縫翻頁 -// @name:en AutoPager -// @version 6.6.51 +// @name:ru Автостраничник +// @version 6.6.75 // @author X.I.U -// @description ⭐无缝加载 下一页内容 至网页底部(类似瀑布流,无限滚动,无需手动点击下一页)⭐,目前支持:【所有「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(以上仅一小部分常见网站,更多的写不下了... +// @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(以上仅一小部分常见网站,更多的写不下了... // @description:zh-TW ⭐無縫加載 下一頁內容 至網頁底部(類似瀑布流,无限滚动,無需手働點擊下一頁)⭐,支持各論壇、社交、遊戲、漫畫、小說、學術、搜索引擎(Google、Bing、Yahoo...) 等網站~ -// @description:en Append the next page content to the bottom seamlessly (like a waterfall, Unlimited scrolling, no need to manually click on the next page)~ +// @description:ru ⭐Плавно добавляет содержимое следующей страницы к нижней части (как водопад, неограниченная прокрутка, не нужно вручную нажимать на следующую страницу) ⭐, поддерживает различные форумы, соцсети, игры, комиксы, романы, научные статьи, поисковики (Google, Bing, Yahoo...) и другие сайты~ // @match *://*/* // @connect userscript.xiu2.xyz -// @connect userscript.xiu2.us.kg // @connect userscript.h233.eu.org // @connect bitbucket.org // @connect jsd.onmicrosoft.cn // @connect wget.la -// @connect cdn.wget.la -// @connect ghgo.xyz -// @connect raw.ixnic.net -// @connect ghproxy.cc -// @connect raw.github.site -// @connect raw.github.store +// @connect ghfast.top +// @connect ghproxy.cfd // @connect raw.dgithub.xyz -// @connect gh-proxy.ygxz.in // @connect ghproxy.net -// @connect github.moeyy.xyz // @connect cdn.jsdmirror.com // @connect js.cdn.haah.net -// @connect gh.akass.cn // @connect raw.kkgithub.com // @connect gcore.jsdelivr.net // @connect fastly.jsdelivr.net // @connect jsd.proxy.aks.moe // @connect jsdelivr.pai233.top -// @connect gh-proxy.com +// @connect gh-proxy.org +// @connect hk.gh-proxy.org +// @connect hub.glowp.xyz +// @connect g.blfrp.cn +// @connect gh.catmak.name // @connect www.xuexiniu.com // @connect bbs.xuexiniu.com // @connect weili.ooopic.com @@ -95,32 +92,28 @@ 'use strict'; let urlArr = [ // 外置翻页规则更新地址分流,以确保更新成功率(记得 connect) 'https://cdn.jsdmirror.com/gh/XIU2/UserScript/other/Autopage/rules.json', - 'https://js.cdn.haah.net/gh/XIU2/UserScript/other/Autopage/rules.json', - 'https://gh.akass.cn/XIU2/UserScript/master/other/Autopage/rules.json', - 'https://raw.kkgithub.com/XIU2/UserScript/master/other/Autopage/rules.json', + //'https://js.cdn.haah.net/gh/XIU2/UserScript/other/Autopage/rules.json', // 证书过期 + //'https://raw.kkgithub.com/XIU2/UserScript/master/other/Autopage/rules.json', // 超时 //'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://gh-proxy.com/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', + //'https://jsdelivr.pai233.top/gh/XIU2/UserScript/other/Autopage/rules.json', + 'https://hub.glowp.xyz/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', + 'https://g.blfrp.cn/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', + 'https://gh.catmak.name/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', + 'https://gh-proxy.org/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', - //'https://userscript.xiu2.us.kg/other/Autopage/rules.json', 'https://userscript.xiu2.xyz/other/Autopage/rules.json', 'https://bitbucket.org/xiu2/userscript/raw/master/other/Autopage/rules.json', 'https://jsd.onmicrosoft.cn/gh/XIU2/UserScript/other/Autopage/rules.json', 'https://wget.la/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', - 'https://cdn.wget.la/gh/XIU2/UserScript/other/Autopage/rules.json', - 'https://ghgo.xyz/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', - 'https://raw.ixnic.net/XIU2/UserScript/master/other/Autopage/rules.json', - 'https://ghproxy.cc/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://ghfast.top/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.dgithub.xyz/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']; @@ -303,7 +296,7 @@ } else if (unsafeWindow.config && ((unsafeWindow.config.assetVersionEncoded && unsafeWindow.config.assetVersionEncoded.indexOf('gitea') !== -1) || (unsafeWindow.config.customEmojis && unsafeWindow.config.customEmojis.gitea))) { console.info(`[自动无缝翻页] - git 托管系统`); return 15; - } else if (loadMoreExclude(loadMoreExclude1) && getAllCSS('.load-more, .load_more, .loadmore, #load-more, #load_more, #loadmore, [id^="loadmore"], .show-more, .show_more, .ajax-more').length === 1) { + } else if (loadMoreExclude(loadMoreExclude1) && getAllCSS('.load-more, .load_more, .loadmore, #load-more, #load_more, #loadmore, [id^="loadmore"], .show-more:not([data-gps-track]), .show_more, .ajax-more').length === 1) { console.info(`[自动无缝翻页] - 部分自带 自动无缝翻页 的网站 1`); return 8; } else if (loadMoreExclude(loadMoreExclude2) && getAllXpath('//*[self::a or self::span or self::button or self::div][text()="加载更多"][not(@href) or @href="#" or starts-with(@href, "javascript")]').length === 1) { @@ -324,17 +317,19 @@ } 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; } - if (getCSS('a.next, a.next-page')) { + if (getCSS('a.next.page-numbers, a.next-page.page-numbers')) { + DBSite.wp_article.pager.nextL = 'a.next.page-numbers, a.next-page.page-numbers' + } else if (getCSS('a.next, a.next-page')) { DBSite.wp_article.pager.nextL = 'a.next, a.next-page' } else if (getCSS('a[rel="next" i], a[aria-label="next" i], a[aria-label="下一个"].page-link, a[aria-label="Next Page" i], a[aria-label="下一页"], a[rel="下一页"], a[title="下一页"], a[aria-label="下一頁"], a[rel="下一頁"], a[title="下一頁"]')) { DBSite.wp_article.pager.nextL = 'a[rel="next" i], a[aria-label="next" i], a[aria-label="下一个"].page-link, a[aria-label="Next Page" i], a[aria-label="下一页"], a[rel="下一页"], a[title="下一页"], a[aria-label="下一頁"], a[rel="下一頁"], a[title="下一頁"]' @@ -375,7 +370,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) { @@ -416,8 +411,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="acontent" i]','[class~="acontent" 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;} } @@ -481,7 +476,7 @@ /* inherits: 继承标识,仅用于自定义规则,用于增删改某个外置规则的部分规则时,可使用该标识来省略不需要修改的规则,只写有变化的规则 - url: 匹配到该域名后要执行的函数/正则(一般用于根据 URL 分配相应翻页规则) + url: 匹配到该域名后要执行的函数/正则(一般用于根据 URL 分配相应翻页规则,url 规则中可通过操作 rule 这个对象变量来修改当前网页实际应用的规则) urlC: 对于使用 pjax 技术的网站,需要监听 URL 变化来重新判断翻页规则(需要放在 url: 中,自定义规则的话需要使用 fun.isUrlC()) noReferer: 获取下一页内容时,不携带 Referer(部分网站携带与不携带可能不一样) @@ -572,6 +567,9 @@ function: { url: ()=> { if (!indexOF('/post/') && !getCSS('#comments, .comments-area, #disqus_thread')) { curSite = DBSite.wp_article; + if (!getCSS(DBSite.wp_article.pager.replaceE)){ // 如果没找到常见的页码父元素,则删除 replaceE 让脚本自行判断 + delete curSite.pager.replaceE + } // 自适应瀑布流样式 setTimeout(()=>{if (getOne(curSite.pager.pageE).style.cssText.indexOf('position: absolute') != -1){insStyle(curSite.pager.pageE + '{position: static !important; float: left !important; height: '+ parseInt(getCSS(curSite.pager.pageE).offsetHeight * 1.1) + 'px !important;}');}}, 1500); } @@ -741,7 +739,7 @@ function: { ignore: true, pager: { nextL: 'a.nxt:not([href^="javascript"]) ,a.next:not([href^="javascript"])', - pageE: 'tbody[id^="normalthread_"]', + pageE: 'tbody[id^="normalthread_"],tbody[id^="stickthread_"]', replaceE: '.pg, .pages', forceHTTPS: true } @@ -984,6 +982,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;}}, @@ -1672,8 +1684,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)); @@ -1701,37 +1749,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; @@ -1888,7 +1908,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; // 恢复翻页 @@ -2175,7 +2195,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) { @@ -2192,13 +2212,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) { @@ -2419,7 +2439,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" 属性来新标签页打开,可以解决大部分情况 @@ -2540,7 +2560,7 @@ function: { } if (!type) return false; // 如果上面的判断中 nextL 和 pageE 都为否,那么 type 就还是空的,则直接返回 false } - const typeArr = 'n,p'.split(','); + const typeArr = type.split(','); for (let i = 0; i < typeArr.length; i++) { switch (typeArr[i]) { case 'n': // nextL @@ -2632,7 +2652,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" 是指定要从下一页获取的元素选择器(也就是网页主体内容),并将其插入当前网页中同样元素的末尾 @@ -2721,7 +2741,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; // 选中开始位置 @@ -2732,6 +2758,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) @@ -2916,4 +2976,4 @@ function: { window.dispatchEvent(new Event('urlchange')) }); } -})(); \ No newline at end of file +})(); diff --git a/DarkMode.user.js b/DarkMode.user.js index fe4c000a3..bc83ea2f7 100644 --- a/DarkMode.user.js +++ b/DarkMode.user.js @@ -1,15 +1,16 @@ // ==UserScript== -// @name 护眼模式 +// @name Dark Mode // @name:zh-CN 护眼模式 // @name:zh-TW 護眼模式 -// @name:en Dark Mode -// @version 1.5.5 +// @name:ru Тёмный режим +// @version 1.5.8 // @author X.I.U -// @description 简单有效的全网通用护眼模式(夜间模式、暗黑模式、深色模式) +// @description Simple and effective network-wide eye protection mode (night mode, dark mode, black mode) // @description:zh-CN 简单有效的全网通用护眼模式(夜间模式、暗黑模式、深色模式) // @description:zh-TW 簡單有效的全網通用護眼模式(夜間模式、暗黑模式、深色模式) -// @description:en Simple and effective network-wide eye protection mode (night mode, dark mode, dark mode) +// @description:ru Простой и эффективный режим защиты глаз по всей сети (ночной режим, тёмный режим, чёрный режим) // @match *://*/* +// @exclude https://live.bilibili.com/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAALfElEQVRYhX2Xe3Bd1XXGf3vvc859X+nq6nUlW5Yly7JlI2xsYzAwtnk4ATpAxkNTHm0mnaTT/gHTTvrIBDLTpp1JUoZppqHQls5AKTR2INOWJJQSXF4x2BhsJCRZ8kuWZckPSVf3/Trn7N3RVTFpQrNn1l97n7O/vda31reWMKMPcmUJA9U8vrwHGdqCHn4HPzePaIxhVSoYbYRXrn7BeMVbCUduF6kVUXHwvQP+6amDaqDnoIompmQytaBnTmB8H5lowrjgFss48SBeI/hUEEZeudLi1ywhJEIJdL6Q8rzal/1a5SGC4XZrYBvWwEZobMdLdH6RH+z/Io1taEeh52fe8tOZbysl/ouWFvANYP7fSz4DgAEBBIL4xiS8ubmnVcTZK68aRK29Dtm8dgnZJydRW+/E2nrnp19nz+7U77+60zt0qMz07J/KxuQTwrIw4rMBCDP6wC+FIIcO34eudDdXf/7jD52Opi772lugY3AZr++hp06gz48j+waRqTWYmVHcS+chEMFeuw1hBzBzY7g/fQE9fmqBYPzBQKrpVa/R4OkCAnXlSvXnX9sIllk220BE4Z8OdHoj54YCK6Od1i2/iUmuRyDRk6NUn3+M0pv/hnf0AE40jEjEqP3oe6Rf/CGOWUTNjFKby2MP7EBtugURFWFxfOhB4+o4yfhrGAdZsxHaqZt6dNce9KXYFSPfGWS68JFqTXSqO7+MCaTqETGTwxSeeoRCOoPT2YUIhFC2jbQF/uwUatU6rPbVUM5T+OfHUO3dWKv6kSsGUIOD6PEPr+fswnanpecFZYVQhFAyjPS9Tj4xw2rcU+pJApEutWsvRjaBW8NUShilkE1JIqlUPfi6VMLNFTBVr+7KYKqJ8uEjlM+dJrR5K0L7eB+9hTd2CFrWYt33h0jH3O5Nj37TBGtgZUBkUN/6q4dQ7UmsnlW450//gU5PPRq460uQXAu+j//i99A/+UdUMoXqbMNkz2OnUkixlF4u9spe/HMTULyEaA7jXkoT2fEbQIXi838DJ4cRDXHkEjc2b0MPHdptZubGpBUbM0UfKQpBRDmKWRSD3tTMk87gddA2WGe4+dkzMD0CyQ5qP/4XVDCAvfkaLMvHamzEClpQzGDF46iuJOH1CaKr2tDZRfzhQ0Ru24NYsYrCM4/jDb+FiHdi3XU/0s3vr7WsGKxcfyPSy+bxi0UqJ8f/IriiE2vrnuWsLefQk8NoO4AMBBB9/XjDI6hQCjdTxq9WCaQ6ULaDFrIeKr3oIlv70Olz2K1xlAVaSUQojD786nKi9e5A3LBHMHn0W+LUUaS1FI9q+iZZWLhHdq/FxFbWSSfsIDIQwVw4g/GK2OuuhloNMzaCaF+DNBJtQfX8LFYigElX0OkQtZKHVy3jqwDlqWncCzPI3nU4t+2FWrH+OLHzHpRl3109memTOhqDi9NfkefHEKvWLTO+VKD68Qf4G27CueFWhJ/Df+0lVFcXJOJYnobm1ZjsJUxuFjyDjK/GNK2gND4ESuDPXcCOSaI7thPqX0ft8OtUn/oTKOQgkET39KJU4RbpZXOtNRW717p+FyRSdYT+v36H4u/fQXbfc3iRDkT3FsTGjWAWEU0OZKfAU9CyEdXVD2lQPduplmo4jkBEbMzK1VgDu5EVTe3gm1RHx6Bcxpz6YLkEO0lMYeFGi6z7eVMqhkT/ZrCb0LNT+NMTRH/nt/BLRdy3X8Nv68Lu6cZEHURjE6K3hirYeLRhDWyA4jxzH40RXJwkeuM29MpN+JcziEsz+Avz6GgcW1pYbUlEQCyHwYpSyxS7rGo+v8man4ZMATrAHf+QSt7FTkWR4QbsjlbIX8IMH0VuuAqj4piGAbhmEPPzI/injnNxMUPuwOtseOIxKKTJ7/8BTBxDdXcjO9sJdTeg01VqH4wg3CDB9bshHMKORbGolVOmeRW09dVdUxkbp3ruNM7GXnS1hK5OYSoSbBDZBcxCBtF3DcUzk6hkhGA0RmtHKx1rOkE04lbzWC1tqMRt1CZHUafPIs8H6/JsNTcgN+9YFq1qgbBUFUvnK9qrVghXCvWN8MBmivueJDtylqaeBKWJaXR4JZEtNyBWrkGt6AJboCZO4J49Rc64xGIhcgtZgm6egKhgtUQQto17WeHOLqCNj5Vowbr7q4j+Lcs1JhhEphcXLTebd0jPwpkx6Lwa++bbCR95ALecp5a6BrvrJoLdHajmMOTnKb3+BrVMntjARpzeFbz8jcfpa22gGm+kMJlm95Zu9M9+iI5G0G3d6EgIUSnjzs/gv/Icgd6rqcvz0IeYWnXc8pEtYnEe8gtXNL7xz74LehHSE3DqNP7EIdx3p5DSh7JNJePiBE/gN3Uz8NWHae5sRJYXqKQvU+raQPg7L6L3/QNMHcfp6EREGjC5LDp9GaOs5VQ/NQI93YctOxFPlwniDh/C3n47JHvrQPTBl3DHjiIDQUQ4jGhOYcqaQFuE0Nl53OnLRHfsZV33KsTxd6GlHeaP477zMl5uAWv7dkyLg6kZREsb+vgCcvPOuoaYuWNQWERs3jAuQ6nooXK6TH566cXnrjQK7uwFaoseWA3oJf2WEhEJUjm/gMgXCfdvQlFFv/R3uCND6FIRv7MfMnOIiaPoI/8NEb2kWAhfoLbdjLr2jmUv/8f+pVbkHRGNnZHum2/udxxtCn4j/vgEIjNTD4O9upfIprUYoxBKo9Z14jumTq7YYD9WayvuR++hs1lkshmha4iuNeDYiIAFMoCevIi+cJHaa29gmvsRTUn0R29g9u1D7bxxv+jrRnpD56cCkdjfV9NzpA+8A5VlLojWAczlGVTAYKXimIU8MlsjtKEXgiF0aRGdm8cEYnXm+O+/gdAGuWsP3shhTHoOEYqCCEF2DsrF5f+e/xiikUldrT6l3z+GevSaTahaZdRY6uFqxRXR1sRyzU/21Gu6OTOMfzmPd6kI8TgiX8B4imouj1QCKmVUNITJ59AnR1F77kH4ZaRnQFroMyeRW3egdt6DwIX391Gshv+4LK2jtcuLqK9t7ALjZXzH1uVM/mb/7BTRnjZEex+idQ2EAnjjR/BdF1PIoV2Bae/F/fh9dL5IYE0XUmpMNo+ev4AINSJWb0UPHa63Z7SvRN3/CHJpFHj2G4iZzAuBbTu+GWpIEGxrQ/3RnlvxG5M4kYa3Lc2u4uyFblnIE+xfAbF2RMtqZGsn/uTYUgHH+dz9eFMnqYx8gO+CEwkjhcDPF/DLHurSaeTm3RiWMsDHeuDrSFvBv3+bi08+N1Vwuj/vZWtu+dwclZlFrESoeZmZysJXoTsCjnVk8dDQBuN+n8RDD9fbcdG7leBX1iOkQjhBOHmQfKGAHW3CS6fR+QClmYuYMyPY265DtPVgtfctiw4V/GcfYfGNQzj3/u4DqlormUoZEQwuc0I//eSnY4G0wPJjmdGhw+mh0fWxNZ0037cXccPd1MXgk+GjNE/tR3+Le+YEyg5TnT6LXlwgcu1u7C99HZlsv3K2+vjvkTs2RvDe3747tm7Dy1SKvzSYPP/MLwxFAkIKEzEye2zswOXX395lJyK0fOFzRHfuglQfqPin59Nn0RNDuJk09vprkd0brmx5H7xCbfgQbrZ83OkfvN1pj0+ZmkBYNhjzCwCeffr/AsBDJyU6kqBwbPzRuTcP/GXV82lYlaJpfQ+BjVdhXX0tNKTAjvzKqKXPTeC++1NKY0c9kVz1SGzb9X8tjIdfzSFCDfUw/noA0scPuxBrwcvmmH3rQIvMm3/y0XdJS4JfIpiIUG9g+wcg6KDnZpGZNDQ0Ii5cSAtlPRHYct13axWvJNwadiiAli4iEP8VAJ89HQtR129TLiG1nos0Nt8dSOi12qi9lRq3utVqT/lirql24hW3vLBQi3d3XUqu73+PZOonBNR/WnbYSMeGTO5/Xf6ZtwDwPwtFRezQVs+sAAAAAElFTkSuQmCC // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand @@ -440,14 +441,14 @@ clearInterval(timer); // 取消定时器(每 5 毫秒一次的) setTimeout(function(){ // 为了避免太快 body 的 CSS 还没加载上,先延迟 150 毫秒(缺点就是可能会出现短暂一闪而过的暗黑滤镜) console.log('[护眼模式] html:', window.getComputedStyle(document.lastElementChild).backgroundColor, 'body:', window.getComputedStyle(document.body).backgroundColor) - if (window.getComputedStyle(document.body).backgroundColor === 'rgba(0, 0, 0, 0)' && window.getComputedStyle(document.lastElementChild).backgroundColor === 'rgba(0, 0, 0, 0)' && !(document.querySelector('head>meta[name="color-scheme"],head>link[href^="resource:"]') && window.matchMedia('(prefers-color-scheme: dark)').matches)) { - // 如果 body 没有 CSS 背景颜色(或是在资源页 且 浏览器为白天模式),那就需要添加一个背景颜色,否则影响滤镜效果 + if (!(checkChallenge()) && window.getComputedStyle(document.body).backgroundColor === 'rgba(0, 0, 0, 0)' && window.getComputedStyle(document.lastElementChild).backgroundColor === 'rgba(0, 0, 0, 0)' && !(document.querySelector('head>meta[name="color-scheme"],head>link[href^="resource:"]') && window.matchMedia('(prefers-color-scheme: dark)').matches)) { + // 如果不是在 (CF CDN 的人机验证页面 且 浏览器为暗黑模式) 或 body 没有 CSS 背景颜色(或是在资源页 且 浏览器为白天模式),那就需要添加一个背景颜色,否则影响滤镜效果 let style_Add2 = document.createElement('style'); style_Add2.id = 'XIU2DarkMode2'; document.lastElementChild.appendChild(style_Add2).textContent = style_00; - } else if ((document.querySelector('head>meta[name="color-scheme"],head>link[href^="resource:"]') && window.matchMedia('(prefers-color-scheme: dark)').matches) || (document.querySelector('html[class*=dark], html[data-dark-theme*=dark], html[data-theme*=dark], html[data-color-mode*=dark], body[class*=dark]')) || (window.getComputedStyle(document.body).backgroundColor === 'rgb(0, 0, 0)') || (getColorValue(document.body) > 0 && getColorValue(document.body) < 898989) || (getColorValue(document.lastElementChild) > 0 && getColorValue(document.lastElementChild) < 898989) || (window.getComputedStyle(document.body).backgroundColor === 'rgba(0, 0, 0, 0)' && window.getComputedStyle(document.lastElementChild).backgroundColor === 'rgb(0, 0, 0)')) { - // 如果是在资源页 且 浏览器为暗黑模式,或 html/body 元素包含 dark 标识,或底色为黑色 (等于0,0,0) 或深色 (小于 89,89,89),就停用本脚本滤镜 + } else if (checkChallenge() || (document.querySelector('head>meta[name="color-scheme"],head>link[href^="resource:"]') && window.matchMedia('(prefers-color-scheme: dark)').matches) || (document.querySelector('html[class*=dark], html[data-dark-theme*=dark], html[data-theme*=dark], html[data-color-mode*=dark], body[class*=dark]')) || (window.getComputedStyle(document.body).backgroundColor === 'rgb(0, 0, 0)') || (getColorValue(document.body) > 0 && getColorValue(document.body) < 898989) || (getColorValue(document.lastElementChild) > 0 && getColorValue(document.lastElementChild) < 898989) || (window.getComputedStyle(document.body).backgroundColor === 'rgba(0, 0, 0, 0)' && window.getComputedStyle(document.lastElementChild).backgroundColor === 'rgb(0, 0, 0)')) { + // 如果是在 (CF CDN 的人机验证页面 且 浏览器为暗黑模式) 或 (资源页 且 浏览器为暗黑模式),或 html/body 元素包含 dark 标识,或底色为黑色 (等于0,0,0) 或深色 (小于 89,89,89),就停用本脚本滤镜 if (menu_value('menu_autoRecognition')) { // 排除自带暗黑模式的网页 (beta) for (let i=0;imeta[name="color-scheme"],head>link[href^="resource:"]') && window.matchMedia('(prefers-color-scheme: dark)').matches) || (document.querySelector('html[class*=dark], html[data-dark-theme*=dark], html[data-theme*=dark], html[data-color-mode*=dark], body[class*=dark]')) || (window.getComputedStyle(document.body).backgroundColor === 'rgb(0, 0, 0)') || (getColorValue(document.body) > 0 && getColorValue(document.body) < 898989) || (getColorValue(document.lastElementChild) > 0 && getColorValue(document.lastElementChild) < 898989) || (window.getComputedStyle(document.body).backgroundColor === 'rgba(0, 0, 0, 0)' && window.getComputedStyle(document.lastElementChild).backgroundColor === 'rgb(0, 0, 0)')) { - // 如果是在资源页 且 浏览器为暗黑模式,或 html/body 元素包含 dark 标识,或底色为黑色 (等于0,0,0) 或深色 (小于 89,89,89),就停用本脚本滤镜 + if (checkChallenge() || (document.querySelector('head>meta[name="color-scheme"],head>link[href^="resource:"]') && window.matchMedia('(prefers-color-scheme: dark)').matches) || (document.querySelector('html[class*=dark], html[data-dark-theme*=dark], html[data-theme*=dark], html[data-color-mode*=dark], body[class*=dark]')) || (window.getComputedStyle(document.body).backgroundColor === 'rgb(0, 0, 0)') || (getColorValue(document.body) > 0 && getColorValue(document.body) < 898989) || (getColorValue(document.lastElementChild) > 0 && getColorValue(document.lastElementChild) < 898989) || (window.getComputedStyle(document.body).backgroundColor === 'rgba(0, 0, 0, 0)' && window.getComputedStyle(document.lastElementChild).backgroundColor === 'rgb(0, 0, 0)')) { + // 如果是在 (CF CDN 的人机验证页面 且 浏览器为暗黑模式) 或 (资源页 且 浏览器为暗黑模式),或 html/body 元素包含 dark 标识,或底色为黑色 (等于0,0,0) 或深色 (小于 89,89,89),就停用本脚本滤镜 if (menu_value('menu_autoRecognition')) { // 排除自带暗黑模式的网页 (beta) for (let i=0;imeta[content*="https://challenges.cloudflare.com"]') && document.querySelector('body>script[nonce]')) + } + // 获取背景颜色值 function getColorValue(e) { let rgbValueArry = window.getComputedStyle(e).backgroundColor.replace(/rgba|rgb|\(|\)| /g, '').split (',') @@ -509,4 +515,4 @@ return false } } -})(); \ No newline at end of file +})(); diff --git a/DuckDuckGo-Enhanced.user.js b/DuckDuckGo-Enhanced.user.js index 13671a26e..2454b7788 100644 --- a/DuckDuckGo-Enhanced.user.js +++ b/DuckDuckGo-Enhanced.user.js @@ -1,14 +1,14 @@ // ==UserScript== -// @name DuckDuckGo 增强 +// @name DuckDuckGo Enhancements // @name:zh-CN DuckDuckGo 增强 // @name:zh-TW DuckDuckGo 增強 -// @name:en DuckDuckGo Enhancements +// @name:ru Улучшения DuckDuckGo // @version 1.0.5 // @author X.I.U -// @description 屏蔽指定域名、链接不携来源、快捷回到顶部(右键两侧空白处) +// @description Block the specified domain name, link without source, and quickly return to the top (the blank space on both sides of the right button)... // @description:zh-CN 屏蔽指定域名、链接不携来源、快捷回到顶部(右键两侧空白处) // @description:zh-TW 屏蔽指定域名、鏈接不攜來源、快捷回到頂部(右鍵兩側空白處) -// @description:en Block the specified domain name, link without source, and quickly return to the top (the blank space on both sides of the right button)... +// @description:ru Блокирует указанные доменные имена, ссылки без источника и быстро возвращает наверх страницы (ПКМ по пустому месту с обеих сторон)... // @match https://duckduckgo.com/* // @icon data:image/png;base64,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 // @grant GM_registerMenuCommand @@ -160,4 +160,4 @@ a[data-testid="result-title-a"]{display: inline-block}` } }) } -})(); \ No newline at end of file +})(); diff --git a/GithubEnhanced-High-Speed-Download.user.js b/GithubEnhanced-High-Speed-Download.user.js index 5b6cb3c0f..68285de55 100644 --- a/GithubEnhanced-High-Speed-Download.user.js +++ b/GithubEnhanced-High-Speed-Download.user.js @@ -1,20 +1,21 @@ // ==UserScript== -// @name Github 增强 - 高速下载 +// @name Github Enhancement - High Speed Download // @name:zh-CN Github 增强 - 高速下载 // @name:zh-TW Github 增強 - 高速下載 -// @name:en Github Enhancement - High Speed Download -// @version 2.6.13 +// @name:ru Улучшение GitHub – быстрое скачивание +// @version 2.6.37 // @author X.I.U -// @description 高速下载 Git Clone/SSH、Release、Raw、Code(ZIP) 等文件 (公益加速)、项目列表单文件快捷下载 (☁)、添加 git clone 命令 +// @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) 等文件 (公益加速)、项目列表单文件快捷下载 (☁) // @description:zh-TW 高速下載 Git Clone/SSH、Release、Raw、Code(ZIP) 等文件 (公益加速)、項目列表單文件快捷下載 (☁) -// @description:en High-speed download of Git Clone/SSH, Release, Raw, Code(ZIP) and other files (Based on public welfare), project list file quick download (☁) +// @description:ru Высокоскоростная загрузка Git Clone/SSH, выпусков, изначальных файлов, кода (ZIP) и других файлов (на основе общественного благосостояния), быстрая загрузка файлов из списка проектов (☁) // @match *://github.com/* // @match *://hub.whtrys.space/* // @match *://dgithub.xyz/* // @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,121 +35,192 @@ (function() { 'use strict'; - var backColor = '#ffffff', fontColor = '#888888', 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.xiu2.us.kg/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@X.I.U/XIU2] 提供'], - //['https://gh.api.99988866.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [hunshcn/gh-proxy] 提供'], // 官方演示站用的人太多了 - ['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.cc/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供'], - ['https://cf.ghproxy.cc/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], - ['https://www.ghproxy.cc/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], - ['https://ghproxy.cn/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], - ['https://www.ghproxy.cn/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], - ['https://github.site', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], - ['https://github.store', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@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://hub.whtrys.space', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [FastGit 群组成员] 提供'], - ['https://dgithub.xyz', '美国', '[美国 西雅图] - 该公益加速源由 [dgithub.xyz] 提供'], - ['https://gh-proxy.ygxz.in/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@一个小站 www.ygxz.in] 提供'], - ['https://download.ixnic.net', '美国', '[美国 洛杉矶] - 该公益加速源由 [@黃埔興國] 提供'], + //['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] 提供'], // 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] 提供'], // 下载认证信息 用户名:123123 密 码:123123 + ['https://firewall.lxstd.org/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [firewall.lxstd.org] 提供'], + ['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] 提供'], // 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://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://github.limoruirui.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.limoruirui.com] 提供'], + ['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.nxnow.top/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [gh.nxnow.top] 提供'], + ['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] 提供'], //], download_url = [ // 为了缓解非美国公益节点压力(考虑到很多人无视前面随机的美国节点),干脆也将其加入随机 - ['https://ghproxy.net/https://github.com', '英国', '[英国伦敦] - 该公益加速源由 [ghproxy.net] 提供 提示:希望大家尽量多使用美国节点(每次随机 负载均衡), 避免流量都集中到亚洲公益节点,减少成本压力,公益才能更持久~'], - ['https://ghgo.xyz/https://github.com', '其他', '[日本、韩国、新加坡、美国、德国等](CDN 不固定) - 该公益加速源由 [ghproxy.link] 提供 提示:希望大家尽量多使用美国节点(每次随机 负载均衡), 避免流量都集中到亚洲公益节点,减少成本压力,公益才能更持久~'], + //['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://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://ghgo.xyz/https://github.com', '韩国', '[日本、韩国、新加坡、美国、德国等](CDN 不固定) - 该公益加速源由 [ghproxy] 提供'], + ['https://hk.gh-proxy.org/https://github.com', '香港', '[中国香港] - 该公益加速源由 [gh-proxy.com] 提供'], + ['https://ghfast.top/https://github.com', '韩国', '[日本、韩国、新加坡、美国、德国等](CDN 不固定) - 该公益加速源由 [ghproxy] 提供'], + //['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://github.moeyy.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供'], - //['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.cc/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供'], - //['https://cf.ghproxy.cc/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], - //['https://www.ghproxy.cc/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], - //['https://ghproxy.cn/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], - //['https://www.ghproxy.cn/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], - //['https://github.site', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], - //['https://github.store', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], + //['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://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://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://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] 提供'], // 挂了 //['git@git.zhlh6.cn:', '美国', '[美国 洛杉矶]'] // 挂了 ], raw_url = [ ['https://raw.githubusercontent.com', 'Github 原生', '[日本 东京] - 缓存:无(或很短)'], - ['https://raw.kkgithub.com', '香港 1', '[中国香港、日本、新加坡等] - 该公益加速源由 [help.kkgithub.com] 提供 - 缓存:有'], + //['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://cdn.wget.la/gh', '香港 2', '[中国香港、中国台湾、日本、美国等](CDN 不固定) - 该公益加速源由 [ucdn.me] 提供 - 缓存:无(或很短)'], + ['https://wget.la/https://raw.githubusercontent.com', '香港 1', '[中国香港、中国台湾、日本、美国等](CDN 不固定) - 该公益加速源由 [ucdn.me] 提供 - 缓存:无(或很短)'], + ['https://hk.gh-proxy.org/https://raw.githubusercontent.com', '香港 2', '[中国香港] - 该公益加速源由 [gh-proxy.com] 提供 - 缓存:有(官方注明 2 小时)'], + ['https://hub.glowp.xyz/https://raw.githubusercontent.com', '香港 3', '[中国香港] - 该公益加速源由 [hub.glowp.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://ghgo.xyz/https://raw.githubusercontent.com', '韩国', '[日本、韩国、新加坡、美国、德国等](CDN 不固定) - 该公益加速源由 [ghproxy.link] 提供 - 缓存:无(或很短)'], - ['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://raw.ixnic.net', '日本 4', '[日本 东京] - 该公益加速源由 [@黃埔興國] 提供 - 缓存:无(或很短)'], + ['https://ghfast.top/https://raw.githubusercontent.com', '韩国', '[日本、韩国、新加坡、美国、德国等](CDN 不固定) - 该公益加速源由 [ghproxy.link] 提供 - 缓存:无(或很短)'], + ['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://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://github.moeyy.xyz/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供 - 缓存:有(约 10 分钟)'], + //['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://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.cc/https://raw.githubusercontent.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供 - 缓存:无(或很短)'], - //['https://cf.ghproxy.cc/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供 - 缓存:无(或很短)'], - //['https://www.ghproxy.cc/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供 - 缓存:无(或很短)'], - //['https://ghproxy.cn/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供 - 缓存:无(或很短)'], - //['https://www.ghproxy.cn/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供 - 缓存:无(或很短)'], - //['https://raw.github.site', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供 - 缓存:无(或很短)'], - //['https://raw.github.store', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@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://cdn.54188.cf/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 = [ '' - ], style = ['padding:0 6px; margin-right: -1px; border-radius: 2px; background-color: var(--XIU2-back-Color); border-color: rgba(27, 31, 35, 0.1); font-size: 11px; color: var(--XIU2-font-Color);']; + ], style = ['padding:0 6px; margin-right: -1px; border-radius: 2px; background-color: var(--XIU2-background-color); border-color: var(--borderColor-default); font-size: 11px; color: var(--XIU2-font-color);']; 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});}); } @@ -192,10 +264,11 @@ for (const target of mutation.addedNodes) { if (target.nodeType !== 1) return if (target.tagName === 'DIV' && target.parentElement && target.parentElement.id === '__primerPortalRoot__') { - addDownloadZIP(target); addGitClone(target); addGitCloneSSH(target); - } else if (target.tagName === 'DIV' && target.className.indexOf('Box-sc-') != -1) { + addDownloadZIP(target); + //setTimeout(()=>{addDownloadZIP(target)}, 300); + } else if (target.tagName === 'DIV' && target.className.indexOf('LocalTab-module__') != -1) { if (target.querySelector('input[value^="https:"]')) { addGitCloneClear('.XIU2-GCS'); addGitClone(target); } else if (target.querySelector('input[value^="git@"]')) { @@ -215,9 +288,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 数组 // 为了缓解非美国公益节点压力(考虑到很多人无视前面随机的美国节点),干脆也将其加入随机 } @@ -226,6 +303,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) { @@ -238,7 +316,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 + ''); }); @@ -248,11 +326,14 @@ // Download ZIP function addDownloadZIP(target) { - let html = target.querySelector('ul[class^=List__ListBox-sc-] ul[class^=List__ListBox-sc-]>li:last-child');if (!html) return - let href_script = document.querySelector('react-partial[partial-name=repos-overview]>script[data-target="react-partial.embeddedData"]'), - href_slice = href_script.textContent.slice(href_script.textContent.indexOf('"zipballUrl":"')+14), - href = href_slice.slice(0, href_slice.indexOf('"')), - url = '', _html = '', new_download_url = get_New_download_url(); + const html = target.querySelector('ul[class^=prc-ActionList-ActionList-]>li:last-child');if (!html) return + let href = html.querySelector('a[href^="/"][href$=".zip"]');if (!href || !href.getAttribute('href')) return + href = href.getAttribute('href'); + //const href_script = document.querySelector('react-partial[partial-name=repos-overview]>script[data-target="react-partial.embeddedData"]');if (!href_script) return + //const href = JSON.parse(href_script.textContent).props.initialPayload.overview.codeButton.local.platformInfo.zipballUrl + /*let href_slice = href_script.textContent.slice(href_script.textContent.indexOf('"zipballUrl":"')+14), + href = href_slice.slice(0, href_slice.indexOf('"')),*/ + let url = '', _html = '', new_download_url = get_New_download_url(); // 克隆原 Download ZIP 元素,并定位 标签 let html_clone = html.cloneNode(true), @@ -268,7 +349,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 } @@ -287,8 +370,8 @@ html_parent = '
', url = '', _html = '', _gitClone = ''; if (html.nextElementSibling) html.nextElementSibling.hidden = true; // 隐藏右侧复制按钮(考虑到能直接点击复制,就不再重复实现复制按钮事件了) - if (html.parentElement.nextElementSibling.tagName === 'SPAN'){ - html.parentElement.nextElementSibling.textContent += ' (↑点击上面文字可复制)' + if (html.parentElement.nextElementSibling.tagName === 'P'){ + html.parentElement.nextElementSibling.textContent += ' (↑点击文字自动复制)' } if (GM_getValue('menu_gitClone')) {_gitClone='git clone '; html.value = _gitClone + html.value; html.setAttribute('value', html.value);} // 克隆原 Git Clone 元素 @@ -318,8 +401,8 @@ html_parent = '
', url = '', _html = '', _gitClone = ''; html.nextElementSibling.hidden = true; // 隐藏右侧复制按钮(考虑到能直接点击复制,就不再重复实现复制按钮事件了) - if (html.parentElement.nextElementSibling.tagName === 'SPAN'){ - html.parentElement.nextElementSibling.textContent += ' (↑点击文字可复制)' + if (html.parentElement.nextElementSibling.tagName === 'P'){ + html.parentElement.nextElementSibling.textContent += ' (↑点击自动复制)' } if (GM_getValue('menu_gitClone')) {_gitClone='git clone '; html.value = _gitClone + html.value; html.setAttribute('value', html.value);} // 克隆原 Git Clone SSH 元素 @@ -351,7 +434,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); @@ -396,7 +479,7 @@ url = raw_url[menu_rawFast][0] + href2; } - fileElm.insertAdjacentHTML('afterend', ``); + fileElm.insertAdjacentHTML('afterend', ``); // 绑定鼠标事件 trElm.onmouseover = mouseOverHandler; trElm.onmouseout = mouseOutHandler; @@ -450,7 +533,7 @@ function colorMode() { let style_Add; if (document.getElementById('XIU2-Github')) {style_Add = document.getElementById('XIU2-Github')} else {style_Add = document.createElement('style'); style_Add.id = 'XIU2-Github'; style_Add.type = 'text/css';} - backColor = '#ffffff'; fontColor = '#888888'; + let backColor = '#ffffff', fontColor = '#888888'; if (document.lastElementChild.dataset.colorMode === 'dark') { // 如果是夜间模式 if (document.lastElementChild.dataset.darkTheme === 'dark_dimmed') { @@ -468,7 +551,7 @@ } } - document.lastElementChild.appendChild(style_Add).textContent = `.XIU2-RS a {--XIU2-back-Color: ${backColor}; --XIU2-font-Color: ${fontColor};}`; + document.lastElementChild.appendChild(style_Add).textContent = `.XIU2-RS a {--XIU2-background-color: ${backColor}; --XIU2-font-color: ${fontColor};}`; } @@ -492,4 +575,4 @@ window.dispatchEvent(new Event('urlchange')) }); } -})(); +})(); \ No newline at end of file diff --git a/HTML5Volume.user.js b/HTML5Volume.user.js index 502f34cb3..1938bca0f 100644 --- a/HTML5Volume.user.js +++ b/HTML5Volume.user.js @@ -1,14 +1,14 @@ // ==UserScript== -// @name HTML5 视频音频默认音量 +// @name HTML5 Video Audio Default Volume // @name:zh-CN HTML5 视频音频默认音量 // @name:zh-TW HTML5 視訊音訊預設音量 -// @name:en HTML5 Video Audio Default Volume -// @version 1.0.3 +// @name:ru Громкость аудио-видео в формате HTML5 по умолчанию +// @version 1.0.5 // @author X.I.U -// @description 避免被一些默认 100% 音量的视频/音频吓一跳(或社死)!且支持各网站分别记住音量... +// @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% 音量的视频/音频吓一跳(或社死)!且支持各网站分别记住音量... // @description:zh-TW 避免被一些預設 100% 音量的視訊/音訊嚇一跳(或社死)!且支援各網站分別記住音量... -// @description:en Avoid being startled by some video/audio with default 100% volume! And support each website to remember the volume separately... +// @description:ru Больше не пугайтесь при просмотре видео или прослушивании аудио со стандартной громкостью 100%! Так ещё каждый веб-сайт запоминает громкость отдельно... // @match *://*/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAALfElEQVRYhX2Xe3Bd1XXGf3vvc859X+nq6nUlW5Yly7JlI2xsYzAwtnk4ATpAxkNTHm0mnaTT/gHTTvrIBDLTpp1JUoZppqHQls5AKTR2INOWJJQSXF4x2BhsJCRZ8kuWZckPSVf3/Trn7N3RVTFpQrNn1l97n7O/vda31reWMKMPcmUJA9U8vrwHGdqCHn4HPzePaIxhVSoYbYRXrn7BeMVbCUduF6kVUXHwvQP+6amDaqDnoIompmQytaBnTmB8H5lowrjgFss48SBeI/hUEEZeudLi1ywhJEIJdL6Q8rzal/1a5SGC4XZrYBvWwEZobMdLdH6RH+z/Io1taEeh52fe8tOZbysl/ouWFvANYP7fSz4DgAEBBIL4xiS8ubmnVcTZK68aRK29Dtm8dgnZJydRW+/E2nrnp19nz+7U77+60zt0qMz07J/KxuQTwrIw4rMBCDP6wC+FIIcO34eudDdXf/7jD52Opi772lugY3AZr++hp06gz48j+waRqTWYmVHcS+chEMFeuw1hBzBzY7g/fQE9fmqBYPzBQKrpVa/R4OkCAnXlSvXnX9sIllk220BE4Z8OdHoj54YCK6Od1i2/iUmuRyDRk6NUn3+M0pv/hnf0AE40jEjEqP3oe6Rf/CGOWUTNjFKby2MP7EBtugURFWFxfOhB4+o4yfhrGAdZsxHaqZt6dNce9KXYFSPfGWS68JFqTXSqO7+MCaTqETGTwxSeeoRCOoPT2YUIhFC2jbQF/uwUatU6rPbVUM5T+OfHUO3dWKv6kSsGUIOD6PEPr+fswnanpecFZYVQhFAyjPS9Tj4xw2rcU+pJApEutWsvRjaBW8NUShilkE1JIqlUPfi6VMLNFTBVr+7KYKqJ8uEjlM+dJrR5K0L7eB+9hTd2CFrWYt33h0jH3O5Nj37TBGtgZUBkUN/6q4dQ7UmsnlW450//gU5PPRq460uQXAu+j//i99A/+UdUMoXqbMNkz2OnUkixlF4u9spe/HMTULyEaA7jXkoT2fEbQIXi838DJ4cRDXHkEjc2b0MPHdptZubGpBUbM0UfKQpBRDmKWRSD3tTMk87gddA2WGe4+dkzMD0CyQ5qP/4XVDCAvfkaLMvHamzEClpQzGDF46iuJOH1CaKr2tDZRfzhQ0Ru24NYsYrCM4/jDb+FiHdi3XU/0s3vr7WsGKxcfyPSy+bxi0UqJ8f/IriiE2vrnuWsLefQk8NoO4AMBBB9/XjDI6hQCjdTxq9WCaQ6ULaDFrIeKr3oIlv70Olz2K1xlAVaSUQojD786nKi9e5A3LBHMHn0W+LUUaS1FI9q+iZZWLhHdq/FxFbWSSfsIDIQwVw4g/GK2OuuhloNMzaCaF+DNBJtQfX8LFYigElX0OkQtZKHVy3jqwDlqWncCzPI3nU4t+2FWrH+OLHzHpRl3109memTOhqDi9NfkefHEKvWLTO+VKD68Qf4G27CueFWhJ/Df+0lVFcXJOJYnobm1ZjsJUxuFjyDjK/GNK2gND4ESuDPXcCOSaI7thPqX0ft8OtUn/oTKOQgkET39KJU4RbpZXOtNRW717p+FyRSdYT+v36H4u/fQXbfc3iRDkT3FsTGjWAWEU0OZKfAU9CyEdXVD2lQPduplmo4jkBEbMzK1VgDu5EVTe3gm1RHx6Bcxpz6YLkEO0lMYeFGi6z7eVMqhkT/ZrCb0LNT+NMTRH/nt/BLRdy3X8Nv68Lu6cZEHURjE6K3hirYeLRhDWyA4jxzH40RXJwkeuM29MpN+JcziEsz+Avz6GgcW1pYbUlEQCyHwYpSyxS7rGo+v8man4ZMATrAHf+QSt7FTkWR4QbsjlbIX8IMH0VuuAqj4piGAbhmEPPzI/injnNxMUPuwOtseOIxKKTJ7/8BTBxDdXcjO9sJdTeg01VqH4wg3CDB9bshHMKORbGolVOmeRW09dVdUxkbp3ruNM7GXnS1hK5OYSoSbBDZBcxCBtF3DcUzk6hkhGA0RmtHKx1rOkE04lbzWC1tqMRt1CZHUafPIs8H6/JsNTcgN+9YFq1qgbBUFUvnK9qrVghXCvWN8MBmivueJDtylqaeBKWJaXR4JZEtNyBWrkGt6AJboCZO4J49Rc64xGIhcgtZgm6egKhgtUQQto17WeHOLqCNj5Vowbr7q4j+Lcs1JhhEphcXLTebd0jPwpkx6Lwa++bbCR95ALecp5a6BrvrJoLdHajmMOTnKb3+BrVMntjARpzeFbz8jcfpa22gGm+kMJlm95Zu9M9+iI5G0G3d6EgIUSnjzs/gv/Icgd6rqcvz0IeYWnXc8pEtYnEe8gtXNL7xz74LehHSE3DqNP7EIdx3p5DSh7JNJePiBE/gN3Uz8NWHae5sRJYXqKQvU+raQPg7L6L3/QNMHcfp6EREGjC5LDp9GaOs5VQ/NQI93YctOxFPlwniDh/C3n47JHvrQPTBl3DHjiIDQUQ4jGhOYcqaQFuE0Nl53OnLRHfsZV33KsTxd6GlHeaP477zMl5uAWv7dkyLg6kZREsb+vgCcvPOuoaYuWNQWERs3jAuQ6nooXK6TH566cXnrjQK7uwFaoseWA3oJf2WEhEJUjm/gMgXCfdvQlFFv/R3uCND6FIRv7MfMnOIiaPoI/8NEb2kWAhfoLbdjLr2jmUv/8f+pVbkHRGNnZHum2/udxxtCn4j/vgEIjNTD4O9upfIprUYoxBKo9Z14jumTq7YYD9WayvuR++hs1lkshmha4iuNeDYiIAFMoCevIi+cJHaa29gmvsRTUn0R29g9u1D7bxxv+jrRnpD56cCkdjfV9NzpA+8A5VlLojWAczlGVTAYKXimIU8MlsjtKEXgiF0aRGdm8cEYnXm+O+/gdAGuWsP3shhTHoOEYqCCEF2DsrF5f+e/xiikUldrT6l3z+GevSaTahaZdRY6uFqxRXR1sRyzU/21Gu6OTOMfzmPd6kI8TgiX8B4imouj1QCKmVUNITJ59AnR1F77kH4ZaRnQFroMyeRW3egdt6DwIX391Gshv+4LK2jtcuLqK9t7ALjZXzH1uVM/mb/7BTRnjZEex+idQ2EAnjjR/BdF1PIoV2Bae/F/fh9dL5IYE0XUmpMNo+ev4AINSJWb0UPHa63Z7SvRN3/CHJpFHj2G4iZzAuBbTu+GWpIEGxrQ/3RnlvxG5M4kYa3Lc2u4uyFblnIE+xfAbF2RMtqZGsn/uTYUgHH+dz9eFMnqYx8gO+CEwkjhcDPF/DLHurSaeTm3RiWMsDHeuDrSFvBv3+bi08+N1Vwuj/vZWtu+dwclZlFrESoeZmZysJXoTsCjnVk8dDQBuN+n8RDD9fbcdG7leBX1iOkQjhBOHmQfKGAHW3CS6fR+QClmYuYMyPY265DtPVgtfctiw4V/GcfYfGNQzj3/u4DqlormUoZEQwuc0I//eSnY4G0wPJjmdGhw+mh0fWxNZ0037cXccPd1MXgk+GjNE/tR3+Le+YEyg5TnT6LXlwgcu1u7C99HZlsv3K2+vjvkTs2RvDe3747tm7Dy1SKvzSYPP/MLwxFAkIKEzEye2zswOXX395lJyK0fOFzRHfuglQfqPin59Nn0RNDuJk09vprkd0brmx5H7xCbfgQbrZ83OkfvN1pj0+ZmkBYNhjzCwCeffr/AsBDJyU6kqBwbPzRuTcP/GXV82lYlaJpfQ+BjVdhXX0tNKTAjvzKqKXPTeC++1NKY0c9kVz1SGzb9X8tjIdfzSFCDfUw/noA0scPuxBrwcvmmH3rQIvMm3/y0XdJS4JfIpiIUG9g+wcg6KDnZpGZNDQ0Ii5cSAtlPRHYct13axWvJNwadiiAli4iEP8VAJ89HQtR129TLiG1nos0Nt8dSOi12qi9lRq3utVqT/lirql24hW3vLBQi3d3XUqu73+PZOonBNR/WnbYSMeGTO5/Xf6ZtwDwPwtFRezQVs+sAAAAAElFTkSuQmCC // @grant GM_registerMenuCommand @@ -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(); // 重新注册菜单(刷新菜单上的音量值) } -})(); \ No newline at end of file +})(); 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/Ping.Sx-Enhanced.user.js b/Ping.Sx-Enhanced.user.js index a61f47d07..8337be3b5 100644 --- a/Ping.Sx-Enhanced.user.js +++ b/Ping.Sx-Enhanced.user.js @@ -1,8 +1,12 @@ // ==UserScript== -// @name Ping.Sx 增强 +// @name Ping.Sx enhancement +// @name:zh-CN Ping.Sx 增强 +// @name:zh-TW Ping.Sx 增強 // @version 1.0.3 // @author X.I.U -// @description 一键复制所有 IP、清理 IP 链接(点击复制而不是跳转)、快捷回到顶部(右键两侧空白处) +// @description Copy all IPs with one click, clean IP links (click Copy instead of Jump), and quickly go back to the top (blank space on both sides of the right click). +// @description:zh-CN 一键复制所有 IP、清理 IP 链接(点击复制而不是跳转)、快捷回到顶部(右键两侧空白处) +// @description:zh-TW 一鍵複製所有 IP、清理 IP 鏈接(點擊複製而不是跳轉)、快捷回到頂部(右鍵兩側空白處) // @match https://ping.sx/ping* // @match https://ping.sx/dig* // @match https://ping.sx/check-port* 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(篡改猴) 详情中**启用 `允许运行用户脚本`** 才能正常运行脚本! + +**** + ## 如果脚本帮到你的话就 "打赏" 一下吧~🎉✨ ![微信赞赏](https://github.com/XIU2/XIU2/blob/master/img/zs-01.png)![支付宝赞赏](https://github.com/XIU2/XIU2/blob/master/img/zs-02.png) **** +## Sponsor + +Powered by DartNode + ## License The GPL-3.0 License. \ No newline at end of file diff --git a/RightClick_ScrollBar_BackToTop.user.js b/RightClick_ScrollBar_BackToTop.user.js index 23a753be2..9b0d6da22 100644 --- a/RightClick_ScrollBar_BackToTop.user.js +++ b/RightClick_ScrollBar_BackToTop.user.js @@ -2,13 +2,13 @@ // @name Right click scroll bar back to top // @name:zh-CN 右键滚动条回到顶部 // @name:zh-TW 右鍵滾動條回到頂部 -// @name:en Right click scroll bar back to top +// @name:ru ПКМ по полоске прокрутки для перехода вверх // @version 1.0.0 // @author X.I.U // @description Right-click the scroll bar on the right side of the webpage to return to the top // @description:zh-CN 鼠标右键网页右侧的滚动条即可回到顶部 // @description:zh-TW 鼠標右鍵網頁右側的滾動條即可回到頂部 -// @description:en Right-click the scroll bar on the right side of the webpage to return to the top +// @description:ru Щёлкните правой кнопкой по полосе прокрутки в правой части веб-страницы, чтобы вернуться наверх // @match *://*/* // @icon data:image/png;base64,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 // @grant none @@ -61,4 +61,4 @@ return scrollBarWidth; // 返回滚动条宽度 } -})(); \ 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 8dfc2b18b..48c150978 100644 --- a/Zhihu-Enhanced.user.js +++ b/Zhihu-Enhanced.user.js @@ -1,13 +1,14 @@ // ==UserScript== -// @name 知乎增强 +// @name Zhihu enhancement // @name:zh-CN 知乎增强 // @name:zh-TW 知乎增強 -// @name:en Zhihu enhancement -// @version 2.3.12 +// @name:ru Улучшение Zhihu +// @version 2.3.28 // @author X.I.U -// @description 屏蔽指定类别(视频、盐选、文章、想法、关注[赞同了XX/关注了XX]等等)、屏蔽用户、屏蔽关键词、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回到顶部(右键两侧)、区分问题文章、移除高亮链接、净化搜索热门、净化标题消息、展开问题描述、显示问题作者、默认高清原图(无水印)、置顶显示时间、完整问题时间、直达问题按钮、默认站外直链... -// @description:zh-TW 屏蔽指定類別(視頻、鹽選、文章、想法、關注[贊同了XX/關注了XX]等等)、屏蔽用戶、屏蔽關鍵詞、默認收起回答、快捷收起回答/評論、快捷回到頂部、區分問題文章、移除高亮鏈接、默認高清原圖(無水印)、默認站外直鏈... -// @description:en A more personalized Zhihu experience~ +// @description A more personalized Zhihu experience~ +// @description:zh-CN 移除登录弹窗、屏蔽指定类别(视频、盐选、文章、想法、关注[赞同/关注了XX]等)、屏蔽低赞/低评回答、屏蔽用户、屏蔽关键词、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回到顶部(右键两侧)、区分问题文章、移除高亮链接、净化搜索热门、净化标题消息、展开问题描述、显示问题作者、默认高清原图(无水印)、置顶显示时间、完整问题时间、直达问题按钮、默认站外直链... +// @description:zh-TW 移除登錄彈窗、屏蔽指定類別(視頻、鹽選、文章、想法、關注[贊同/關注了XX]等)、屏蔽低贊/低評回答、屏蔽用戶、屏蔽關鍵詞、默認收起回答、快捷收起回答/評論、快捷回到頂部、區分問題文章、移除高亮鏈接、默認高清原圖(無水印)、默認站外直鏈... +// @description:ru Более персонализированный опыт пользования сайтом Zhihu~ // @match *://www.zhihu.com/* // @match *://zhuanlan.zhihu.com/* // @exclude https://www.zhihu.com/signin* @@ -35,11 +36,19 @@ 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], ['menu_blockKeywordsComment', '屏蔽关键词 - 评论区', '屏蔽关键词 - 评论区', true], ['menu_customBlockKeywords', '自定义屏蔽关键词', '自定义屏蔽关键词', []], + ['menu_addSelectedBlockKeywords', '添加选中文字到屏蔽词 ↑', '添加选中文字到屏蔽词', []], ['menu_blockType', '屏蔽指定类别 (视频/文章等)', '勾选 = 屏蔽该类别的信息流', ''], ['menu_blockTypeVideo', '视频 [首页、搜索页、问题页、关注页]', '视频(首页、搜索页、问题页、关注页)', true], ['menu_blockTypeArticle', '文章 [首页、搜索页、关注页]', '文章(首页、搜索页、关注页)', false], @@ -72,15 +81,22 @@ 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) } @@ -422,6 +448,72 @@ 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; + } + console.log(type) + + + function blockLowCount_(className1, className2, menuUpvote, menuComment) { + // 前几条因为是直接加载的,而不是动态插入网页的,所以需要单独判断 + function blockLowCount_now() { + document.querySelectorAll(className1).forEach(function(item1){ + console.log(item1) + blockLowCount_1(item1,menuUpvote,'upvote_num'); + blockLowCount_1(item1,menuComment,'comment_num'); + }) + } + + 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,'upvote_num'); + blockLowCount_1(target,menuComment,'comment_num'); + } + } + } + }; + const observer = new MutationObserver(callback); + observer.observe(document, { childList: true, subtree: true }); + } + + + function blockLowCount_1(item, menu, type) { + if (GM_getValue(menu)) { + let item_ContentItem = item.querySelector('.ContentItem') + if (item_ContentItem && item_ContentItem.dataset.zaExtraModule) { + let item2 = JSON.parse(item_ContentItem.dataset.zaExtraModule); + //console.log(item2) + if (item2 && item2.card.content && Number(item2.card.content[type]) < Number(GM_getValue(menu))) { + console.log('已屏蔽' + (type === 'upvote_num' ? '低赞':'低评') + (item_ContentItem.classList.contains('AnswerItem') ? '回答':'文章') + ':', item2.card.content[type] + '<' + GM_getValue(menu), item); + item.hidden = true; + item.style.display = 'none'; + } + } + } + } +} + + + // 自定义屏蔽用户 function customBlockUsers() { let nowBlockUsers = ''; @@ -446,6 +538,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; @@ -749,6 +844,62 @@ function blockUsers(type) { } +// 缓存最近一次选中的文字,避免从右键脚本菜单回调中取不到当前选区 +var selectedTextForBlockKeywords = ''; +// 规范化屏蔽词文本:压缩多余空白并去掉首尾空格 +function normalizeBlockKeywordText(text) { + return (text || '').replace(/\s+/g, ' ').trim(); +} + +// 读取当前选中的文字,兼容输入框和普通页面选区 +function getSelectedBlockKeywordText() { + let text = ''; + const activeElement = document.activeElement; + if (activeElement && ((activeElement.tagName === 'TEXTAREA') || (activeElement.tagName === 'INPUT' && /^(?:text|search|url|tel|password)$/i.test(activeElement.type))) && typeof activeElement.selectionStart === 'number') { + text = activeElement.value.slice(activeElement.selectionStart, activeElement.selectionEnd); + } + if (!text && window.getSelection) { + text = window.getSelection().toString(); + } + return normalizeBlockKeywordText(text); +} + +// 记录最近一次选中的文字,供右键脚本菜单 [添加选中文字到屏蔽词] 使用 +function rememberSelectedBlockKeyword() { + const updateSelectedBlockKeyword = function() { + selectedTextForBlockKeywords = getSelectedBlockKeywordText(); + } + document.addEventListener('selectionchange', updateSelectedBlockKeyword); + document.addEventListener('contextmenu', updateSelectedBlockKeyword, true); + window.addEventListener('urlchange', function(){selectedTextForBlockKeywords = '';}); +} + +// 将当前选中的文字直接加入 [自定义屏蔽关键词] 列表 +function addSelectedKeywordToBlocklist() { + if (!menu_value('menu_blockKeywords')) { + GM_notification({text: '请先开启 [屏蔽指定关键词] 功能~', timeout: 3000}); + return + } + + const keyword = getSelectedBlockKeywordText() || selectedTextForBlockKeywords; + if (!keyword) { + GM_notification({text: '未检测到选中的文字,请先选中内容后再使用该菜单~', timeout: 3000}); + return + } + + let keywords = (GM_getValue('menu_customBlockKeywords') || []).map(function(item){return normalizeBlockKeywordText(item)}).filter(function(item){return item !== ''}); + if (keywords.some(function(item){return item.toLowerCase() === keyword.toLowerCase();})) { + GM_notification({text: `屏蔽词 [${keyword}] 已存在,无需重复添加~`, timeout: 3000}); + return + } + + keywords.push(keyword); + GM_setValue('menu_customBlockKeywords', keywords); + registerMenuCommand(); // 同步刷新缓存的菜单值 + GM_notification({text: `已添加屏蔽词 [${keyword}]\n后续加载的标题/评论会按该关键词过滤~`, timeout: 4000}); +} + + // 自定义屏蔽关键词(标题) function customBlockKeywords() { let nowBlockKeywords = ''; @@ -1114,6 +1265,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}} @@ -1156,7 +1309,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', `直达问题`); } } @@ -1179,6 +1334,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() { @@ -1291,7 +1478,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 = `` @@ -1305,7 +1492,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) // 发布时间置顶 @@ -1338,10 +1525,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'); } } @@ -1454,49 +1641,33 @@ 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); - } - }) + rememberSelectedBlockKeyword(); // 记录当前选中的文字,供右键脚本菜单直接加入屏蔽词 + 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); // 默认站外直链 @@ -1513,6 +1684,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'); // 屏蔽指定类别(视频/文章等) @@ -1544,8 +1720,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(); // 屏蔽指定用户 @@ -1580,30 +1756,34 @@ 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等) + } } } } -})(); +})(); \ No newline at end of file diff --git a/other/Autopage/rules.json b/other/Autopage/rules.json index 184343b08..c5c32cd15 100644 --- a/other/Autopage/rules.json +++ b/other/Autopage/rules.json @@ -2,10 +2,10 @@ "百度搜索": { "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": "id('page')//a[contains(text(),'下一页')]", + "nextL": "#page strong+a:not(.n)", "pageE": "#content_left", "replaceE": "#page" } @@ -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,14 +174,34 @@ "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": ["ya.ru","yandex.com","yandex.ru","yandex.ua","yandex.by","yandex.kz","yandex.uz","yandex.com.tr"], + "url": "/^\\/search\\/touch\\//", + "pager": { + "type": 2, + "nextL": ".Pager:not(.Pager_progress_yes)>button.Pager-More", + "interval": 1500, + "scrollD": 1000 + } + }, "Yandex 搜索": { - "host": ["yandex.com","yandex.ru","yandex.ua","yandex.by","yandex.kz","yandex.uz","yandex.com.tr"], - "url": "/^\\/search\\//", + "host": ["ya.ru","yandex.com","yandex.ru","yandex.ua","yandex.by","yandex.kz","yandex.uz","yandex.com.tr"], + "url": "/^\\/search/", "history": true, "pager": { "nextL": "a.Pager-Item_type_next,a.pager__item_kind_next", @@ -198,7 +210,7 @@ } }, "Yandex 搜索 - 视频": { - "host": ["yandex.com","yandex.ru","yandex.ua","yandex.by","yandex.kz","yandex.uz","yandex.com.tr"], + "host": ["ya.ru","yandex.com","yandex.ru","yandex.ua","yandex.by","yandex.kz","yandex.uz","yandex.com.tr"], "url": "/^\\/video\\/search/", "hiddenPN": true, "pager": { @@ -288,41 +300,13 @@ "replaceE": ".pagination" } }, - "百度贴吧 - 搜索页": { - "host": "tieba.baidu.com", - "url": "/^\\/f\\/search\\/res/", - "pager": { - "nextL": "a.next", - "pageE": ".s_post_list > div", - "replaceE": ".pager" - } - }, - "百度贴吧 - 帖子内": { - "host": ["tieba.baidu.com","jump2.bdimg.com"], - "url": "if (location.hostname == 'jump2.bdimg.com') location.hostname = 'tieba.baidu.com'; return (fun.indexOF('/p/')) ", - "iframe": true, - "thread": true, - "style": ".d_sign_split,img.j_user_sign,.d_author .d_pb_icons,.save_face_bg,.save_face_bg_2,li.d_name a.icon_tbworld,.lzl_cnt a.icon_tbworld,.topic_list_box.topic-fixed {display: none !important;} a.p_author_face.j_frame_guide {background: none repeat scroll 0 0 #FFF !important;border: 1px solid #CCC !important;padding: inherit !important;} .red_text,.red-text,.vip_red,.vip-red,.vip_red:hover,.vip-red:hover,.vip_red:visited,.vip-red:visited {color: #2d64b3 !important;}", - "pager": { - "type": 5, - "nextL": "//li[contains(@class,'pb_list_pager')]/a[text()='下一页']", - "style": "ul.tbui_aside_float_bar,.core_title_wrap_bright.tbui_follow_fixed.core_title_absolute_bright {display: none !important;}" - } - }, - "百度贴吧": { - "host": "tieba.baidu.com", - "url": "/^\\/f/", - "style": "img.j_retract {margin-top: 0 !important;margin-bottom: 0 !important;}", - "history": false, + "4get.ca 搜索": { + "host": "4get.ca", + "url": "/^\\/(web|images|videos|news|music)/", + "blank": 3, "pager": { - "nextL": "js; if (fun.getCSS('a.next.pagination-item')) return (fun.getCSS('a.next.pagination-item').href + '&pagelets=frs-list%2Fpagelet%2Fthread&pagelets_stamp=' + new Date().getTime())", - "pageE": "//script[contains(text(),'Bigpipe.register(\"frs-list/pagelet/thread_list\", ')]", - "insertP": ["#thread_list",3], - "interval": 2000, - "scrollD": 3000 - }, - "function": { - "bF": "let scriptText = pageE[0].textContent.replace('Bigpipe.register(\"frs-list/pagelet/thread_list\", ',''); scriptText = scriptText.slice(0,scriptText.indexOf(').')); let temp = document.createElement('div'); temp.innerHTML = JSON.parse(scriptText).content; fun.getCSS('#frs_list_pager').innerHTML = fun.getCSS('#frs_list_pager',temp).innerHTML; return fun.src_bF(fun.getAllCSS('#thread_list>li',temp))" + "nextL": ".nextpage", + "pageE": ".text-result, .image-wrapper" } }, "豆瓣": { @@ -345,9 +329,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 +541,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 +615,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" } }, @@ -697,6 +649,18 @@ "bF": "o=document.createElement('div'); o.innerHTML=JSON.parse(pageE[0].textContent).comments; fun.getCSS('.pagination').outerHTML = o.querySelector('.pagination').outerHTML; return [].slice.call(o.querySelectorAll('.media:not(.no-btm-border)')).reverse()" } }, + "2Libra": { + "host": "2libra.com", + "url": "fun.isUrlC();if (fun.lp() == '/' || fun.indexOF(/^\\/node\\//) || fun.isPager()){return true;}else if(fun.indexOF(/^\\/post\\//)){rule.pager.pageE='[data-main-left] div.card.border-base-content\\\\/10';rule.thread=true;}else if(fun.indexOF(/^\\/user\\/(.+)\\/(post|comment)/)){rule.pager.type=1;rule.pager.pageE='.bg-base-100>div>ul>li.items-center, [data-main-left] div.card.border-base-content\\\\/10>div:not([class])>div>div.border-base-content\\\\/10';}else{return false;};return true", + "blank": 3, + "history": false, + "pager": { + "type": 6, + "nextL": ".join-item.btn.btn-sm.btn-active+a", + "pageE": "ul.card>li.items-center", + "loadTime": 600 + } + }, "巴哈姆特": { "host": "forum.gamer.com.tw", "url": "/^\\/B\\.php/", @@ -710,6 +674,19 @@ "aF": "Forum.B.lazyThumbnail();Forum.Common.drawNoImageCanvas();" } }, + "巴哈姆特動畫瘋 - list": { + "host": "ani.gamer.com.tw", + "url": "return fun.isPager()", + "blank": 3, + "pager": { + "nextL": "a.next", + "pageE": ".theme-list-block>a", + "replaceE": ".page_control" + }, + "function": { + "bF": "return fun.src_bF(pageE)" + } + }, "懂车帝论坛": { "host": "www.dongchedi.com", "url": "fun.isUrlC(); return (fun.indexOF('/community/'))", @@ -822,6 +799,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 +906,33 @@ "replaceE": ".pagination" } }, + "TFW2005": { + "host": "www.tfw2005.com", + "url": "if(fun.indexOF(/^\\/boards\\/forums\\//)){rule.blank=3;}else if(fun.indexOF(/^\\/boards\\/threads\\//)){rule.pager.pageE='ol#messageList>li';rule.thread=true;}else{return false;};return true", + "pager": { + "nextL": ".PageNav .currentPage+a[href], .PageNav .currentPage+a+span>span>a:first-child", + "pageE": "ol.discussionListItems>li", + "replaceE": ".PageNav" + } + }, + "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,8 +953,38 @@ "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"], + "host": ["/^((www|bbs)\\.)?(soul|snow|south|spring|summer|north|white|level|east|blue)-plus\\.(net|org)$/","bbs.imoutolove.me"], "url": "return (fun.lp() == '/thread.php' || fun.lp() == '/search.php')", "pager": { "nextL": "//div[@class='pages']/ul/li[./b]/following-sibling::li[1][not(@class)]/a[not(text()='»')]", @@ -946,7 +993,7 @@ } }, "北+ - 图墙": { - "host": ["/^((www|bbs)\\.)?(soul|snow|south|spring|summer|north|white|level|east)-plus\\.(net|org)$/","bbs.imoutolove.me"], + "host": ["/^((www|bbs)\\.)?(soul|snow|south|spring|summer|north|white|level|east|blue)-plus\\.(net|org)$/","bbs.imoutolove.me"], "url": "return (fun.lp() == '/thread_new.php')", "style": "img.lazy {display: inline !important;}", "pager": { @@ -959,7 +1006,7 @@ } }, "北+ - 帖子内": { - "host": ["/^((www|bbs)\\.)?(soul|snow|south|spring|summer|north|white|level|east)-plus\\.(net|org)$/","bbs.imoutolove.me"], + "host": ["/^((www|bbs)\\.)?(soul|snow|south|spring|summer|north|white|level|east|blue)-plus\\.(net|org)$/","bbs.imoutolove.me"], "url": "return (fun.lp() == '/read.php')", "thread": true, "pager": { @@ -969,7 +1016,7 @@ } }, "北+ - 用户页": { - "host": ["/^((www|bbs)\\.)?(soul|snow|south|spring|summer|north|white|level|east)-plus\\.(net|org)$/","bbs.imoutolove.me"], + "host": ["/^((www|bbs)\\.)?(soul|snow|south|spring|summer|north|white|level|east|blue)-plus\\.(net|org)$/","bbs.imoutolove.me"], "url": "return (fun.lp() == '/u.php' && (fun.indexOF('action-topic-','s') || fun.indexOF('action-post-','s')))", "pager": { "nextL": "//div[@class='pages']/ul/li[./b]/following-sibling::li[1][not(@class)]/a[not(text()='»')]", @@ -1144,6 +1191,16 @@ "replaceE": ".pagination:not(#breadcrumb_multipage_popup)" } }, + "kaspersky 论坛": { + "host": "forum.kaspersky.com", + "url": "/^\\/forum\\//", + "blank": 3, + "pager": { + "nextL": ".ipsPagination_next>a", + "pageE": ".ipsDataItem", + "replaceE": "div[data-role=tablePagination]>.ipsPagination" + } + }, "ptt.cc": { "host": "www.ptt.cc", "url": "/^\\/bbs\\/.+\\/index/", @@ -1164,7 +1221,7 @@ } }, "nodeseek": { - "host": "www.nodeseek.com", + "host": ["www.nodeseek.com","www.deepflood.com"], "url": "return fun.isPager()", "pager": { "nextL": "a.pager-next", @@ -1179,7 +1236,7 @@ "iframe": true, "pager": { "type": 5, - "nextL": "a[aria-disabled='false'][class*='filterProps-Styled-Component'][href]:last-child" + "nextL": "button[aria-current=true]+a:not([aria-disabled])" } }, "Pixiv - 用户作品页": { @@ -1189,7 +1246,7 @@ "style": "ul[class*='-1 ']>li {display: inline !important;} #root{margin-bottom: -125px;} ul>li>button[class^='sc-'][style='background-color: rgb(0,0,0);'],a[href^='/premium/lead/lp'] {display: none !important;}", "pager": { "type": 5, - "nextL": "a[aria-disabled='false'][class*='filterProps-Styled-Component'][href]:last-child" + "nextL": "span.charcoal-pagination-button[aria-current=page]+a.charcoal-pagination-button" } }, "Pixiv - 手机版 - 分类页": { @@ -1199,7 +1256,7 @@ "iframe": true, "pager": { "type": 5, - "nextL": "a.next" + "nextL": "button[aria-current=true]+a" } }, "Pixiv - 手机版 - 用户作品页": { @@ -1453,6 +1510,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 +2047,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": { @@ -2045,6 +2126,18 @@ "replaceE": "ul.page-numbers" } }, + "NS头号玩家": { + "host": ["nsthwj.cn","nsthwj.vip"], + "url": "return fun.isPager()", + "pager": { + "nextL": "a.page-next", + "pageE": ".posts-warp>div.col", + "replaceE": ".pagination" + }, + "function": { + "bF": "return fun.src_bF(pageE,[1,'a[data-bg]','data-bg'])" + } + }, "4K 游戏网": { "host": "4k-w.com", "url": "return (fun.indexOF('/game/') || fun.indexOF('s=','s'))", @@ -2055,6 +2148,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 +2205,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 +2215,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 +2245,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 +2300,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'))", @@ -2219,6 +2346,15 @@ "replaceE": ".pagination_wrap" } }, + "mini4k.io": { + "host": "mini4k.io", + "url": "return fun.isPager()", + "blank": 3, + "pager": { + "nextL": "a.pager__item--next", + "pageE": "li.column" + } + }, "厂长资源": { "host": ["czspp.com","www.czspp.com"], "url": "return fun.isPager()", @@ -2642,7 +2778,7 @@ } }, "YTS": { - "host": "yts.mx", + "host": ["yts.bz","yts.lt","yts.gg","yts.am","yts.ag"], "url": "/^\\/browse-movies/", "blank": 3, "pager": { @@ -2703,15 +2839,6 @@ "pageE": ".download>tbody>tr:not(:nth-last-child(-n+2))" } }, - "Knaben": { - "host": "knaben.eu", - "url": "/^\\/(search|browse)\\//", - "blank": 3, - "pager": { - "nextL": "#nextPage", - "pageE": "tbody>tr" - } - }, "idope": { "host": "/^idope\\..+/", "url": "/^\\/torrent-list\\//", @@ -2722,7 +2849,7 @@ } }, "Kickass Torrents": { - "host": ["kickasss.to","katcr.to"], + "host": ["kickasss.to","katcr.to","kickasstorrent.cr","kickass.torrentbay.st"], "url": "return (fun.lp() != '/' && !fun.indexOF('.html') && !fun.indexOF('/popular'))", "blank": 3, "pager": { @@ -2741,6 +2868,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')))", @@ -2751,6 +2888,25 @@ "replaceE": ".search_stat" } }, + "EXT Torrents": { + "host": "ext.to", + "url": "/^\\/browse\\//", + "blank": 3, + "pager": { + "nextL": ".pages>li.active+li>a", + "pageE": ".found-content-block table>tbody>tr", + "replaceE": ".pages" + } + }, + "Knaben": { + "host": "knaben.org", + "url": "/^\\/(search|browse)\\//", + "pager": { + "nextL": "#nextPage", + "pageE": ".table.caption-top>tbody>tr", + "replaceE": ".pageNumbers" + } + }, "BTDig": { "host": "btdig.com", "url": "/^\\/search/", @@ -2843,8 +2999,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" } @@ -2852,8 +3009,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" @@ -2880,7 +3038,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", @@ -3157,6 +3315,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;}", @@ -3231,6 +3415,34 @@ "replaceE": ".main_control" } }, + "开心漫": { + "host": "www.kaixinman.com", + "url": "/^\\/chapter\\//", + "pager": { + "type": 6, + "nextL": "//div[@class='chapter-toolbar']/a[text()='下一章']", + "pageE": ".chapter-image", + "replaceE": ".chapter-toolbar", + "loadTime": 1000, + "scrollD": 4000 + }, + "function": { + "bF": "pageE.forEach((i)=>{i.className=i.className.replace('loading','');i.style.cssText='background-image: none;';i.innerHTML=''}); return fun.src_bF(pageE)" + } + }, + "开心漫 - 列表": { + "host": "www.kaixinman.com", + "url": "/^\\/category\\//", + "blank": 3, + "pager": { + "nextL": ".page>li.active.hidden-sm+li>a", + "pageE": ".vodlist", + "replaceE": ".page" + }, + "function": { + "bF": "return fun.src_bF(pageE, [1, 'div[data-original]', 'data-original'])" + } + }, "漫画星球 / 6 漫画": { "host": ["/\\.mhxqiu/","/^www\\.sixmh\\d\\./"], "url": "if (fun.indexOF(/\\/\\d+\\.html/)) {return true;} else if (fun.indexOF(/\\/\\d+\\/$/)) {setTimeout(()=>{if (document.getElementById('zhankai')) document.getElementById('zhankai').click();},500);}", @@ -3373,7 +3585,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": { @@ -3383,12 +3595,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, @@ -3396,7 +3608,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 动漫": { @@ -3452,6 +3664,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);}", @@ -3549,6 +3783,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/'))", @@ -3751,6 +3995,19 @@ "replaceE": ".read_btn" } }, + "繁体小说 www.novels.com.tw": { + "host": "www.novels.com.tw", + "url": "/\\d\\.html\\?aid/", + "style": ".container>aside", + "pager": { + "type": 6, + "nextL": "#next_url", + "pageE": "#article.content>p", + "replaceE": ".read_nav", + "loadTime": 1000, + "scrollD": 1000 + } + }, "得奇小说网": { "host": "www.deqixs.com", "url": "return fun.isPager()", @@ -3761,12 +4018,34 @@ "replaceE": ".prenext,.page" } }, - "皇帝之家": { - "host": "www.huangdizhijia.com", - "url": "/chapter-\\d+\\.html/", - "history": true, + "爱下电子书": { + "host": "ixdzs8.com", + "url": "return (fun.indexOF(/^\\/read\\/.+\\.html$/) || fun.isPager())", "pager": { - "nextL": "//div[contains(@class,'tag-view-type')]//a[text()='下一章']", + "nextL": ".chapter-next, .num.current+a", + "pageE": ".page-content>section, .u-list>li", + "replaceE": ".chapter-act, .page" + } + }, + "飘天文学": { + "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/", + "history": true, + "pager": { + "nextL": "//div[contains(@class,'tag-view-type')]//a[text()='下一章']", "pageE": ".tagCol>p", "insertP": [".tagCol>p",6], "replaceE": ".tag-view-type" @@ -3805,15 +4084,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()'" } }, @@ -3843,15 +4124,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" } }, "哔哩轻小说 - 手机版 - 文库": { @@ -3866,6 +4149,47 @@ "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 + } + }, + "oop.tw": { + "host": "www.oop.tw", + "url": "/^\\/areada\\//", + "pager": { + "type": 6, + "nextL": "#next_url", + "pageE": "#article>p", + "replaceE": ".reading-nav", + "scrollD": 5000 + } + }, "必读推荐": { "host": "www.bidutuijian.com", "url": "/^\\/books\\/.+\\/(?:(?!0000)\\d{4})\\.html/", @@ -3887,6 +4211,17 @@ "replaceE": ".noveltitle[height]" } }, + "樱花文学 novnov": { + "host": "novnov.net", + "url": "/^\\/(book\\/chapter\\/|library|search)/", + "style": ".nextbox,.linea", + "blank": 3, + "pager": { + "nextL": ".nextp>a,li.current+li>a", + "pageE": ".novelcontent>p,.vlist>.nlist>li,.searchlist>ul>li", + "replaceE": ".footerbox,.changepage" + } + }, "AO3 - 列表页/搜索页": { "host": ["archiveofourown.org","i.ao3is.top"], "url": "return (fun.indexOF(/\\/works$/) || fun.lp() == '/works/search')", @@ -3927,6 +4262,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'))", @@ -4025,7 +4371,7 @@ "url": "return (fun.lp() == '/' && !location.search)", "pager": { "type": 2, - "nextL": ".active .load-more", + "nextL": ".gh-load-more>button", "interval": 1000, "scrollD": 4000 } @@ -4546,6 +4892,15 @@ "scrollD": 1000 } }, + "再问科研": { + "host": "www.izaiwen.cn", + "url": "return fun.isPager()", + "pager": { + "nextL": ".page-item.active+li>a", + "pageE": ".item-box", + "replaceE": ".pagination" + } + }, "StackOverflow": { "host": "stackoverflow.com", "url": "return (fun.lp() == '/search' || (fun.indexOF(/^\\/questions/) && !fun.indexOF(/^\\/questions\\/\\d+/)) || fun.lp() == '/tags' || fun.lp() == '/users')", @@ -4785,9 +5140,9 @@ "replaceE": ".paginate-container" } }, - "Github - Issues/Pull/Discussions/Releases/Actions/OrgRepositories": { + "Github - Pull/Discussions/Releases/Actions/OrgRepositories": { "host": "github.com", - "url": "return (fun.indexOF(/\\/(issues|pulls|discussions|releases)$/) || fun.indexOF('/discussions/categories') || fun.indexOF(/\\/actions($|\\/workflows)/) || fun.indexOF(/^\\/orgs\\/.+\\/repositories/))", + "url": "return (fun.indexOF(/\\/(pulls|discussions|releases)$/) || fun.indexOF('/discussions/categories') || fun.indexOF(/\\/actions($|\\/workflows)/) || fun.indexOF(/^\\/orgs\\/.+\\/repositories/))", "blank": 4, "pager": { "nextL": "a.next_page", @@ -4795,6 +5150,26 @@ "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": 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_']", + "replaceE": "nav[class^=prc-Pagination-PaginationContainer-]" + } + }, "Github - Commits": { "host": "github.com", "url": "/\\/commits/", @@ -4802,7 +5177,7 @@ "blank": 4, "pager": { "nextL": "a[data-testid=pagination-next-button]:not([aria-disabled])", - "pageE": ".Timeline-Item" + "pageE": "div[class^='prc-Timeline-Timeline-']>div" } }, "Github - Tags": { @@ -4831,9 +5206,9 @@ "style": "header.AppHeader {position: fixed !important;width: 100% !important;top: 0px !important;z-index: 100 !important;} .application-main {margin-top: 64px !important;}", "blank": 4, "pager": { - "nextL": "a[rel=next][class^=Pagination]", + "nextL": "a[rel=next][class^=prc-Pagination]", "pageE": "[data-testid=results-list]>div,.repo-list>li,.code-list-item,#commit_search_results>div,.issue-list-item,.discussion-list-item,#package_search_results>div,#marketplace_search_results>div:first-child>div,.topic-list-item,#wiki_search_results>div:first-child>div,#user_search_results>div:first-child>div", - "replaceE": "nav[class^='Pagination__PaginationContainer'],.pagination" + "replaceE": "nav[class^=prc-Pagination-PaginationContainer]" } }, "Github - Gist - Search/discover": { @@ -4947,6 +5322,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')", @@ -5054,13 +5440,13 @@ } }, "GreasyFork": { - "host": ["greasyfork.org","sleazyfork.org"], + "host": ["greasyfork.org","cn-greasyfork.org","sleazyfork.org"], "url": "return (fun.indexOF(/\\/(scripts|feedback)$/) || fun.indexOF(/\\/scripts\\/(by-site|libraries|code-search)/) || (fun.indexOF('/discussions') && !fun.indexOF(/\\/\\d+/)))", "blank": 3, "pager": { - "nextL": "a.next_page", + "nextL": "a[aria-current=page]+a", "pageE": "ol#browse-script-list>li,.script-discussion-list,.discussion-list>div", - "replaceE": ".pagination" + "replaceE": ".pagy" } }, "OpenUserJS": { @@ -5133,6 +5519,20 @@ "replaceE": ".s-pagination-container" } }, + "Amazon - gp": { + "host": "/^www\\.amazon\\.([a-z]+|com?\\.[a-z]+)$/", + "url": "return fun.isPager()", + "style": "#navFooter,#rhf", + "blank": 3, + "pager": { + "type": 6, + "nextL": ".a-selected+li.a-normal>a", + "pageE": ".a-ordered-list>li.zg-no-numbers", + "replaceE": ".a-pagination", + "loadTime": 7000, + "scrollD": 1000 + } + }, "eBay": { "host": "/^(www|[a-z]{2})\\.ebay\\.([a-z]+|com?\\.[a-z]+)$/", "url": "/^\\/sch\\//", @@ -5225,10 +5625,11 @@ } }, "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": { + "type": 6, "nextL": "(//tr[@style='vertical-align:top'])[1]//button[@class='bt_sml_main'][starts-with(text(), '下')]/..", "pageE": "tr.listbg", "replaceE": "tr[style='vertical-align:top']:first-child" @@ -5253,6 +5654,14 @@ "replaceE": ".page" } }, + "3G壁纸": { + "host": "www.3gbizhi.com", + "url": "return fun.isPager()", + "pager": { + "nextL": ".cur+a", + "pageE": ".contlistw>.cl>li" + } + }, "nastol": { "host": "www.nastol.com.ua", "blank": 3, @@ -5291,6 +5700,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/'))", @@ -5301,6 +5721,17 @@ "replaceE": ".numeric_pages" } }, + "AnimeCharactersDataBase - ux_search": { + "host": "www.animecharactersdatabase.com", + "url": "/^\\/ux_search\\.php/", + "blank": 3, + "pager": { + "type": 3, + "nextL": "#uxthumbs>.flexcontainer>a.flexitem.bg2.fgw.pad:last-child", + "pageE": "#uxthumbs>a", + "replaceE": "#uxthumbs>.flexcontainer" + } + }, "新片场": { "host": "www.xinpianchang.com", "url": "return (fun.lp() != '/')", @@ -5369,6 +5800,16 @@ "scriptT": 0 } }, + "Hpoi手办维基": { + "host": "www.hpoi.net", + "url": "/^\\/hobby\\/all/", + "pager": { + "nextL": "js; return fun.getNextEP('.hpoi-page-active+li:not(.hpoi-pagination-ellipsis)>a, .hpoi-page-active+li.hpoi-pagination-ellipsis+li:not(.hpoi-pagination-ellipsis)>a','page=',/page=\\d+/)", + "pageE": ".hpoi-glyphicons-list>li", + "replaceE": ".hpoi-pagination", + "scrollD": 1000 + } + }, "资本市场电子化信息披露平台": { "host": "eid.csrc.gov.cn", "url": "/\\/\\d+\\/index/", @@ -5470,6 +5911,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": { @@ -5487,7 +5938,7 @@ } }, "中國評論新聞": { - "host": "hk.crntt.com", + "host": ["www.crntt.com","hk.crntt.com"], "url": "return fun.isPager('n')", "pager": { "nextL": "//img[contains(@src,'next_page.gif')]/..|//a[text()='下一頁']", @@ -5507,6 +5958,26 @@ "bF": "return fun.src_bF(pageE,[0,'img[data-url]','data-url'])" } }, + "美食天下": { + "host": "www.meishichina.com", + "url": "return fun.isPager()", + "pager": { + "nextL": ".now_page+a", + "pageE": ".main .plist>li", + "replaceE": ".ui-page-inner" + }, + "function": { + "bF": "return fun.src_bF(pageE)" + } + }, + "美食天下2": { + "host": "home.meishichina.com", + "url": "return fun.isPager()", + "pager": { + "type": 2, + "nextL": "#recipeindex_living_loading>a" + } + }, "Xvideos": { "host": ["www.xnxx.com","www.xvideos.com"], "url": "return fun.isPager('p,r')", @@ -5595,8 +6066,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": { @@ -5690,6 +6171,36 @@ "replaceE": ".pages" } }, + "2048 论坛": { + "host": "hjd2048.com", + "url": "/\\/thread\\.php/", + "style": "tr[onmouseover]", + "pager": { + "nextL": ".pages>b+a", + "pageE": "#ajaxtable>tbody[style]>tr", + "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/'))", @@ -5710,6 +6221,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/))", @@ -5735,15 +6255,46 @@ "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()", + "blank": 3, + "pager": { + "nextL": ".thisclass+li>a", + "pageE": ".listA", + "replaceE": ".pages_c" + } + }, "JavDB": { "host": "/^javdb/", "url": "return (fun.isTitle('JavDB') && !fun.indexOF('/v/') && fun.isPager('r'))", @@ -5784,6 +6335,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": { @@ -5812,6 +6366,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')", @@ -5847,12 +6411,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 @@ -6024,6 +6588,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()", @@ -6155,7 +6729,7 @@ } }, "hanime1": { - "host": "hanime1.me", + "host": ["hanime1.me","hanimeone.me"], "url": "/^\\/search/", "blank": 3, "pager": { @@ -6169,7 +6743,7 @@ } }, "hanime1 - 漫画 - 分类页": { - "host": "hanime1.me", + "host": ["hanime1.me","hanimeone.me"], "url": "return (fun.lp() == '/comics' || fun.indexOF(/^\\/(tags|artists|characters|parodies|groups)\\//))", "blank": 3, "pager": { @@ -6184,7 +6758,7 @@ } }, "hanime1 - 漫画": { - "host": "hanime1.me", + "host": ["hanime1.me","hanimeone.me"], "url": "/^\\/comic\\/\\d+\\/\\d/", "style": "#current-page-image {display: block !important; margin: 0 auto !important; max-height: calc(250vh) !important;}", "pager": { @@ -6207,8 +6781,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": { @@ -6223,7 +6797,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, @@ -6313,8 +6887,8 @@ } }, "nhentai": { - "host": ["nhentai.net","nhentai.to","nhentai.xxx"], - "url": "if (fun.indexOF(/^\\/g\\/\\d+\\/\\d+\\//)){const imageA = document.querySelector('#image-container>a'); imageA.outerHTML=imageA.innerHTML;return true;} else if (fun.getCSS('a.next') && fun.getCSS('.gallery')){return true;}", + "host": ["nhentai.net","nhentai.to","web.zorocdn.xyz"], + "url": "if (fun.indexOF(/^\\/g\\/\\d+\\/\\d+\\//)){const imageA = document.querySelector('#image-container>a'); imageA.outerHTML=imageA.innerHTML;return true;} else {return (fun.getCSS('a.next') && fun.getCSS('.gallery'));}", "style": "section#image-container img {max-width: 100% !important;height: auto !important;display: block !important;margin: 0 auto !important;}", "blank": 3, "pager": { @@ -6326,6 +6900,32 @@ "bF": "if (fun.getCSS('.container>.gallery') && typeof _n_app !== 'undefined' && _n_app.options.blacklisted_tags != null && _n_app.options.blacklisted_tags.length != 0) {pageE.forEach(function (one) {let tags = one.dataset.tags.split(' ');for (let i=0; i < tags.length; i++){for (let ii=0; ii < _n_app.options.blacklisted_tags.length; ii++){if (tags[i] == _n_app.options.blacklisted_tags[ii]) {one.classList.add('blacklisted');};};};});}; return fun.src_bF(pageE)" } }, + "nhentai.xxx": { + "host": "nhentai.xxx", + "url": "return fun.isPager()", + "blank": 3, + "pager": { + "nextL": "li.active+li:not(.disabled)>a", + "pageE": ".gallery_item", + "replaceE": ".pagination" + }, + "function": { + "bF": "return fun.src_bF(pageE)" + } + }, + "nhentai.xxx - g": { + "host": "nhentai.xxx", + "url": "if(fun.indexOF(/^\\/g\\/\\d+\\/\\d+\\//)){const imageA = fun.getCSS('.fw_img');imageA.outerHTML=imageA.innerHTML;return true;}", + "style": ".pg_prv,.pg_nxt", + "pager": { + "nextL": "js;return fun.getNextUPN(/^\\/g\\/\\d+\\/(\\d+)\\//,/\\/(\\d+)\\/$/,'/','/','2',fun.getCSS('.tp').textContent)", + "pageE": "#fimg", + "replaceE": ".reader_nav" + }, + "function": { + "bF": "return fun.src_bF(pageE)" + } + }, "HentaiFox": { "host": "hentaifox.com", "url": "return fun.isPager()", @@ -6348,6 +6948,30 @@ "bF": "return fun.src_bF(pageE)" } }, + "HentaiEra": { + "host": "hentaiera.com", + "url": "return fun.isPager()", + "style": ".blacklisted {z-index: 0;opacity: 1;-webkit-filter: none;filter: none;pointer-events: auto;}", + "blank": 3, + "pager": { + "nextL": ".pgi_itm.active+li.pgi_itm:not(.disabled)>a", + "pageE": ".thumb", + "replaceE": ".pagination" + } + }, + "HentaiEra-gallery": { + "host": "hentaiera.com", + "url": "/^\\/gallery\\/\\d+/", + "hiddenPN": true + }, + "HentaiEra-view": { + "host": "hentaiera.com", + "url": "if(fun.indexOF(/^\\/view\\/\\d+\\/\\d+\\//)){const a=fun.getCSS('#gimg');a.src=a.dataset.src;a.parentElement.outerHTML=a.outerHTML;window.scrollTo=()=>{return false;};return true;}", + "style": ".page_next,.page_prev,.nav_pagination,#footer_bar", + "pager": { + "nextL": "js; const next = fun.getCSS('.nav_next:not([disabled])');if(next){let gimg = fun.getCSS('#gimg'),gimg_clone = gimg.cloneNode();gimg_clone.src='';gimg.insertAdjacentElement('afterend', gimg_clone);gimg.id='';next.click();fun.pageNumIncrement();}" + } + }, "9hentai": { "host": "www1.9hentai.com", "url": "/^\\/g\\/\\d+\\/\\d+\\//", @@ -6359,6 +6983,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;}", @@ -6366,11 +7000,10 @@ }, "hitomi": { "host": "hitomi.la", - "url": "if(fun.indexOF('/reader/')){setTimeout(()=>{let _img='
';for (let i=0;i<2;i++){_img += ``;};document.getElementById('comicImages').outerHTML = _img+'
';window.imgIndex = 1;},500);return true;}", + "url": "if(fun.indexOF('/reader/')){window.imgIndex = 1;return true;}", "style": "body {height: auto !important; overflow: auto !important;} #comicImages.fitVertical img {margin: 0 auto;display: block;max-height: calc(1000px - 41px);} .navbar-static-top {display: none;}", "pager": { - "nextL": "js;if(window.imgIndex +1 >= our_galleryinfo.length){return}; document.getElementById('comicImages').insertAdjacentHTML('beforeend',``); window.imgIndex+=1;", - "scrollD": 1000 + "nextL": "js;if(window.imgIndex +1 >= our_galleryinfo.length){return}; document.getElementById('comicImages').insertAdjacentHTML('beforeend',``);window.imgIndex+=1;fun.pageNumIncrement();" } }, "MANGA1000": { @@ -6433,6 +7066,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']", @@ -6452,6 +7086,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],.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]):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'))", @@ -6541,7 +7208,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, @@ -6552,7 +7219,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": { @@ -6561,6 +7228,50 @@ "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": "smtt6.com", + "url": "/^\\/man-hua-yue-du\\//", + "pager": { + "nextL": "//div[@class='positionFooter']//a[text()='下一章']", + "pageE": "#conch-content img.lazy", + "replaceE": ".positionFooter", + "scrollD": 4000 + }, + "function": { + "bF": "return fun.src_bF(pageE)" + } + }, + "色漫天堂 - 分类页": { + "host": "smtt6.com", + "url": "/^\\/man-hua-lei-bie/", + "pager": { + "nextL": "//li[@class='hl-hidden-xs']/a[@class='active']/../following-sibling::li[1]/a", + "pageE": "ul.hl-vod-list>li", + "replaceE": ".hl-page-wrap" + }, + "function": { + "bF": "return fun.src_bF(pageE,[1,'a[data-original]','data-original'])" + } + }, "鸟鸟韩漫": { "host": ["/^nnhanman\\.[a-z]+/","/^nnhanman\\d\\.com/","/^nnhm\\d\\.[a-z]+/"], "url": "/^\\/comic\\/.+\\/chapter-\\d+\\.html/", @@ -6592,6 +7303,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()", @@ -6651,11 +7375,34 @@ } }, "爱妹子": { - "host": "xx.knit.bid", + "host": ["xx.knit.bid","www.lovecutes.com"], + "url": "return fun.getCSS('li.active+li>a')", + "blank": 4, "pager": { - "type": 2, - "nextL": ".ias_trigger>a", - "scrollD": 3000 + "type": 3, + "nextL": "js; return fun.getNextEPN('li.active+li>a',/page\\/\\d+\\//,'page/','/')", + "pageE": ".image-container>article, .image-container>.item-image", + "replaceE": ".pagination" + }, + "function": { + "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": { @@ -6693,6 +7440,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()", @@ -6749,6 +7510,16 @@ "replaceE": ".pagination" } }, + "xsnvshen": { + "host": "/^(www|m)\\.xsnvshen\\.[a-z]+$/", + "url": "if(!fun.isMobile() && fun.indexOF(/^\\/album\\/\\d+/)){rule.pager={};rule.hiddenPN=true;rule.blank=0;rule.style='.workContentWrapper {display: none !important;} .showlists.hide {display: unset !important;} .showlists li {float: unset !important;} .swl-item .swi-hd {width: unset !important;height: unset !important;} .showlists img {max-width: unset !important;max-height: unset !important;width: 100% !important;}';return true;}else{return fun.isPager();}", + "blank": 3, + "pager": { + "nextL": "#pageNum .active+a,.pg_next", + "pageE": ".camWholeBoxUl>li,.container>#arcbox img,.body>.list.cl>li", + "replaceE": "#pageNum" + } + }, "秀人美女": { "host": ["/^www\\.xrmn.+/","/^www.xiu\\d+\\./"], "url": "return (fun.isPager() && fun.indexOF(/(^\\/.)|(\\d+\\.html$)/))", @@ -6866,6 +7637,12 @@ "replaceE": "#dm-fy" } }, + "凸凹吧 tuao.cc": { + "host": "www.tuao.cc", + "url": "if(fun.indexOF(/^\\/Articles\\/Content\\//)){let d=document.querySelector('#imgData');if(d&&d.value){let a=d.value.split('|');if(a.length>4){const container=document.getElementById('pageContainer');let i=4;const timer=setInterval(()=>{if(i>=a.length){clearInterval(timer);return};const img=document.createElement('img');img.src=atob(a[i]);container.appendChild(img);i++},1000)};return true};}", + "style": "#pagination,body>div:last-of-type,ins", + "hiddenPN": true + }, "仙女图": { "host": "www.xiannvtu.com", "url": "/^\\/v\\//", @@ -6887,7 +7664,7 @@ } }, "24FA": { - "host": ["/^(www\\.)?24fa\\.[a-z]+$/","/^(www\\.)?24fa.?\\.com$/","/^(www\\.)?\\d{3}w\\.cc$/","/^(www\\.)?\\d{3}\\.(mom|one)$"], + "host": ["/^(www\\.)?24fa\\.[a-z]+$/","/^(www\\.)?24fa.?\\.com$/","/^(www\\.)?24[a-z]{2}\\.cc$/","/^(www\\.)?\\d{3}w\\.cc$/","/^(www\\.)?\\d{3}\\.(mom|one)$"], "url": "return (fun.isTitle('24FA') && fun.isPager())", "style": ".moreR {display: none;} #content img {width: auto; max-width: 99%; height: auto; display: block; margin: 0 auto;}", "pager": { @@ -7038,6 +7815,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/", @@ -7047,6 +7837,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')", @@ -7058,6 +7858,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())",