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 1d200e1f0..7062dbdb2 100644 --- a/Autopage.user.js +++ b/Autopage.user.js @@ -3,7 +3,7 @@ // @name:zh-CN 自动无缝翻页 // @name:zh-TW 自動無縫翻頁 // @name:ru Автостраничник -// @version 6.6.58 +// @version 6.6.75 // @author X.I.U // @description ⭐Append the next page content to the bottom seamlessly (like a waterfall, Unlimited scrolling, no need to manually click on the next page) ⭐, support various forums, social networking, games, comics, novels, academics, search engines (Google, Bing, Yahoo...) and other websites~ // @description:zh-CN ⭐无缝加载 下一页内容 至网页底部(类似瀑布流,无限滚动,无需手动点击下一页)⭐,目前支持:【所有「Discuz!、Flarum、phpBB、MyBB、Xiuno、XenForo、NexusPHP...」论坛】【百度、谷歌(Google)、必应(Bing)、搜狗、微信、360、Yahoo、Yandex 等搜索引擎...】、贴吧、豆瓣、知乎、NGA、V2EX、起点中文、千图网、千库网、Pixabay、Pixiv、3DM、游侠网、游民星空、NexusMods、Steam 创意工坊、CS.RIN.RU、RuTracker、BT之家、萌番组、动漫花园、樱花动漫、爱恋动漫、AGE 动漫、Nyaa、SrkBT、RARBG、SubHD、423Down、不死鸟、扩展迷、小众软件、【动漫狂、动漫屋、漫画猫、漫画屋、漫画 DB、HiComic、Mangabz、Xmanhua 等漫画网站...】、PubMed、Z-Library、GreasyFork、Github、StackOverflow(以上仅一小部分常见网站,更多的写不下了... @@ -15,27 +15,22 @@ // @connect bitbucket.org // @connect jsd.onmicrosoft.cn // @connect wget.la -// @connect cdn.wget.la // @connect ghfast.top -// @connect raw.ixnic.net // @connect ghproxy.cfd -// @connect raw.github.site -// @connect raw.github.store // @connect raw.dgithub.xyz -// @connect gh-proxy.ygxz.in // @connect ghproxy.net -// @connect github.moeyy.xyz -// @connect github.7boe.top -// @connect github.starrlzy.cn // @connect cdn.jsdmirror.com // @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 @@ -96,17 +91,18 @@ (function() { 'use strict'; let urlArr = [ // 外置翻页规则更新地址分流,以确保更新成功率(记得 connect) - 'https://github.7boe.top/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', - 'https://github.starrlzy.cn/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', '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', @@ -114,16 +110,10 @@ '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://ghfast.top/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', - //'https://raw.ixnic.net/XIU2/UserScript/master/other/Autopage/rules.json', // 解析空 - 'https://ghproxy.cfd/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', - //'https://raw.github.site/XIU2/UserScript/master/other/Autopage/rules.json', // 挂了 - //'https://raw.github.store/XIU2/UserScript/master/other/Autopage/rules.json', // 挂了 - 'https://raw.dgithub.xyz/XIU2/UserScript/master/other/Autopage/rules.json', - 'https://gh-proxy.ygxz.in/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', - 'https://ghproxy.net/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', - 'https://github.moeyy.xyz/https://raw.githubusercontent.com/XIU2/UserScript/master/other/Autopage/rules.json', + //'https://ghproxy.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']; @@ -327,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="下一頁"]' @@ -378,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) { @@ -419,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;} } @@ -575,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); } @@ -987,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;}}, @@ -1675,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)); @@ -1704,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; @@ -1891,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; // 恢复翻页 @@ -2724,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; // 选中开始位置 @@ -2735,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) diff --git a/DarkMode.user.js b/DarkMode.user.js index 61f237e65..bc83ea2f7 100644 --- a/DarkMode.user.js +++ b/DarkMode.user.js @@ -3,13 +3,14 @@ // @name:zh-CN 护眼模式 // @name:zh-TW 護眼模式 // @name:ru Тёмный режим -// @version 1.5.5 +// @version 1.5.8 // @author X.I.U // @description Simple and effective network-wide eye protection mode (night mode, dark mode, black mode) // @description:zh-CN 简单有效的全网通用护眼模式(夜间模式、暗黑模式、深色模式) // @description:zh-TW 簡單有效的全網通用護眼模式(夜間模式、暗黑模式、深色模式) // @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 (',') diff --git a/GithubEnhanced-High-Speed-Download.user.js b/GithubEnhanced-High-Speed-Download.user.js index 1433d770e..68285de55 100644 --- a/GithubEnhanced-High-Speed-Download.user.js +++ b/GithubEnhanced-High-Speed-Download.user.js @@ -3,7 +3,7 @@ // @name:zh-CN Github 增强 - 高速下载 // @name:zh-TW Github 增強 - 高速下載 // @name:ru Улучшение GitHub – быстрое скачивание -// @version 2.6.26 +// @version 2.6.37 // @author X.I.U // @description High-speed download of Git Clone/SSH, Release, Raw, Code(ZIP) and other files (Based on public welfare), project list file quick download (☁) // @description:zh-CN 高速下载 Git Clone/SSH、Release、Raw、Code(ZIP) 等文件 (公益加速)、项目列表单文件快捷下载 (☁) @@ -15,6 +15,7 @@ // @match *://kkgithub.com/* // @match *://github.site/* // @match *://github.store/* +// @match *://bgithub.xyz/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAACEUExURUxpcRgWFhsYGBgWFhcWFh8WFhoYGBgWFiUlJRcVFRkWFhgVFRgWFhgVFRsWFhgWFigeHhkWFv////////////r6+h4eHv///xcVFfLx8SMhIUNCQpSTk/r6+jY0NCknJ97e3ru7u+fn51BOTsPCwqGgoISDg6empmpoaK2srNDQ0FhXV3eXcCcAAAAXdFJOUwCBIZXMGP70BuRH2Ze/LpIMUunHkpQR34sfygAAAVpJREFUOMt1U+magjAMDAVb5BDU3W25b9T1/d9vaYpQKDs/rF9nSNJkArDA9ezQZ8wPbc8FE6eAiQUsOO1o19JolFibKCdHGHC0IJezOMD5snx/yE+KOYYr42fPSufSZyazqDoseTPw4lGJNOu6LBXVUPBG3lqYAOv/5ZwnNUfUifzBt8gkgfgINmjxOpgqUA147QWNaocLniqq3QsSVbQHNp45N/BAwoYQz9oUJEiE4GMGfoBSMj5gjeWRIMMqleD/CAzUHFqTLyjOA5zjNnwa4UCEZ2YK3khEcBXHjVBtEFeIZ6+NxYbPqWp1DLKV42t6Ujn2ydyiPi9nX0TTNAkVVZ/gozsl6FbrktkwaVvL2TRK0C8Ca7Hck7f5OBT6FFbLATkL2ugV0tm0RLM9fedDvhWstl8Wp9AFDjFX7yOY/lJrv8AkYuz7fuP8dv9izCYH+x3/LBnj9fYPBTpJDNzX+7cAAAAASUVORK5CYII= // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand @@ -37,24 +38,28 @@ var menu_rawFast = GM_getValue('xiu2_menu_raw_fast'), menu_rawFast_ID, menu_rawDownLink_ID, menu_gitClone_ID, menu_customUrl_ID, menu_feedBack_ID; const download_url_us = [ ['https://gh.h233.eu.org/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@X.I.U/XIU2] 提供'], - //['https://gh.api.99988866.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [hunshcn/gh-proxy] 提供'], // 官方演示站用的人太多了 - ['https://ghproxy.1888866.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [WJQSERVER-STUDIO/ghproxy] 提供'], + //['https://gh.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://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://hub.gitmirror.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [GitMirror] 提供'], // 域名无解析 //['https://down.sciproxy.com/github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [sciproxy.com] 提供'], // 522 - ['https://ghproxy.cfd/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供'], + ['https://ghproxy.it/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供'], //['https://github.site', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], // 挂了 //['https://github.store', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], // 挂了 //['https://gh.jiasu.in/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@0-RTT] 提供'], // 404 ['https://github.boki.moe/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [blog.boki.moe] 提供'], - ['https://github.moeyy.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供'], + //['https://github.moeyy.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供'], // 墙了 ['https://gh-proxy.net/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.net] 提供'], //['https://github.yongyong.online/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.yongyong.online] 提供'], // 空白 //['https://ghdd.862510.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghdd.862510.xyz] 提供'], // turnstile token missing @@ -81,46 +86,54 @@ ['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://dgithub.xyz', '美国', '[美国 西雅图] - 该公益加速源由 [dgithub.xyz] 提供'], + ['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://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://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://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://ghproxy.net/https://github.com', '日本', '[日本 大阪] - 该公益加速源由 [ghproxy.net] 提供'], // 挂了 //['https://proxy.yaoyaoling.net/https://github.com', '日本', '[日本 东京] - 该公益加速源由 [proxy.yaoyaoling.net] 提供'], //['https://g.blfrp.cn/https://github.com', '日本', '[日本 东京] - 该公益加速源由 [g.blfrp.cn] 提供'], - //['https://github.3x25.com/https://github.com', '新加坡', '[新加坡] - 该公益加速源由 [github.3x25.com] 提供'], + //['https://raw.bgithub.xyz', '荷兰', '[荷兰] - 该公益加速源由 [bgithub.xyz] 提供 - 缓存:有'], //['https://ghproxy.1888866.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [WJQSERVER-STUDIO/ghproxy] 提供'], - //['https://github.moeyy.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供'], + //['https://github.moeyy.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供'], // 墙了 //['https://gh-proxy.net/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.net] 提供'], + //['https://rapidgit.jjda.de5.net/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [热心网友] 提供'], //['https://github.yongyong.online/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.yongyong.online] 提供'], //['https://ghdd.862510.xyz/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghdd.862510.xyz] 提供'], - //['https://hub.gitmirror.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [GitMirror] 提供'], - //['https://gh-proxy.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.com] 提供'], - //['https://ghproxy.cfd/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供'], + //['https://hub.gitmirror.com/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [GitMirror] 提供'], // 域名无解析 + //['https://gh-proxy.org/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.com] 提供'], + //['https://cdn.gh-proxy.org/https://github.com', '其他', '[Fastly CDN] - 该公益加速源由 [gh-proxy.com] 提供'], + //['https://edgeone.gh-proxy.org/https://github.com', '其他', '[edgeone] - 该公益加速源由 [gh-proxy.com] 提供'], + //['https://ghproxy.it/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供'], //['https://github.site', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], // 挂了 //['https://github.store', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供'], // 挂了 //['https://gh.jiasu.in/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@0-RTT] 提供'], // 404 //['https://github.boki.moe/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [blog.boki.moe] 提供'], //['https://raw.ihtw.moe/github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [raw.ihtw.moe] 提供'], + //['https://xget.xi-xu.me/gh', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.com/xixu-me/Xget] 提供'], //['https://dgithub.xyz', '美国', '[美国 西雅图] - 该公益加速源由 [dgithub.xyz] 提供'], - //['https://gh-proxy.ygxz.in/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@一个小站 www.ygxz.in] 提供'], + //['https://gh-proxy.ygxz.in/https://github.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@一个小站 www.ygxz.in] 提供'], // 被蔷 //['https://hub.scholar.rr.nu', '美国', '[美国 纽约] - 该公益加速源由 [FastGit 群组成员] 提供'], // 证书到期 ], clone_ssh_url = [ ['ssh://git@ssh.github.com:443/', 'Github 原生', '[日本、新加坡等] - Github 官方提供的 443 端口的 SSH(依然是 SSH 协议),适用于限制访问 22 端口的网络环境'], @@ -128,42 +141,48 @@ //['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://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', '日本 2', '[日本 东京] - 该公益加速源由 [JSDelivr CDN] 提供 - 缓存:有 - 不支持大小超过 50 MB 的文件 - 不支持版本号格式的分支名(如 v1.2.3)'], + //['https://ghproxy.net/https://raw.githubusercontent.com', '日本 1', '[日本 大阪] - 该公益加速源由 [ghproxy.net] 提供 - 缓存:有(约 10 分钟)'], // 挂了 + ['https://fastly.jsdelivr.net/gh', '日本 1', '[日本 东京] - 该公益加速源由 [JSDelivr CDN] 提供 - 缓存:有 - 不支持大小超过 50 MB 的文件 - 不支持版本号格式的分支名(如 v1.2.3)'], + ['https://cdn.gh-proxy.org/https://raw.githubusercontent.com', '日本 2', '[Fastly CDN] - 该公益加速源由 [gh-proxy.com] 提供 - 缓存:有'], //['https://jsdelivr.pai233.top/gh', '日本 3', '[日本 东京](Vercel Anycast) - 该公益加速源由 [blog.pai233.top] 提供 - 缓存:有'], // This deployment is temporarily paused //['https://proxy.yaoyaoling.net/https://raw.githubusercontent.com', '日本', '[日本 东京] - 该公益加速源由 [proxy.yaoyaoling.net] 提供'], // 空白 ['https://g.blfrp.cn/https://raw.githubusercontent.com', '日本 3', '[日本 东京] - 该公益加速源由 [g.blfrp.cn] 提供'], - ['https://github.3x25.com/https://raw.githubusercontent.com', '新加坡', '[新加坡] - 该公益加速源由 [github.3x25.com] 提供'], + //['https://raw.bgithub.xyz', '荷兰', '[荷兰] - 该公益加速源由 [bgithub.xyz] 提供 - 缓存:有'], //['https://gcore.jsdelivr.net/gh', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [JSDelivr CDN] 提供 - 缓存:有 - 不支持大小超过 50 MB 的文件 - 不支持版本号格式的分支名(如 v1.2.3)'], // 变成 美国 Cloudflare CDN 了 //['https://jsdelivr.b-cdn.net/gh', '其他', '[中国香港、中国台湾、日本、新加坡等](CDN 不固定) - 该公益加速源由 [@rttwyjz] 提供 - 缓存:有'], // 疑似 SNI 阻断 + //['https://xget.xi-xu.me/gh', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.com/xixu-me/Xget] 提供'], //['https://ghproxy.1888866.xyz/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [WJQSERVER-STUDIO/ghproxy] 提供'], - //['https://github.moeyy.xyz/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供 - 缓存:有(约 10 分钟)'], + //['https://github.moeyy.xyz/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [moeyy.cn] 提供 - 缓存:有(约 10 分钟)'], // 墙了 //['https://gh-proxy.net/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.net] 提供'], + //['https://rapidgit.jjda.de5.net/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [热心网友] 提供'], //['https://github.yongyong.online/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [github.yongyong.online] 提供'], //['https://ghdd.862510.xyz/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [ghdd.862510.xyz] 提供'], //['https://raw.cachefly.998111.xyz', '其他 4', '[新加坡、日本、印度等](Anycast CDN 不固定) - 该公益加速源由 [@XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0] 提供 - 缓存:有(约 12 小时)'], // 证书到期 - //['https://ghproxy.cfd/https://raw.githubusercontent.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供 - 缓存:无(或很短)'], + //['https://ghproxy.it/https://raw.githubusercontent.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@yionchilau] 提供 - 缓存:无(或很短)'], //['https://raw.github.site', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供 - 缓存:无(或很短)'], // 挂了 //['https://raw.github.store', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@yionchilau] 提供 - 缓存:无(或很短)'], // 挂了 //['https://gh.jiasu.in/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@0-RTT] 提供'], // 404 //['https://github.boki.moe/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [blog.boki.moe] 提供 - 缓存:无(或很短)'], - //['https://gh-proxy.com/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.com] 提供 - 缓存:有'], + //['https://gh-proxy.org/https://raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [gh-proxy.com] 提供 - 缓存:有'], + //['https://cdn.gh-proxy.org/https://raw.githubusercontent.com', '其他', '[Fastly CDN] - 该公益加速源由 [gh-proxy.com] 提供'], + //['https://edgeone.gh-proxy.org/https://raw.githubusercontent.com', '其他', '[edgeone] - 该公益加速源由 [gh-proxy.com] 提供'], //['https://cdn.githubraw.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [githubraw.com] 提供 - 缓存:有(几乎永久)'], //['https://raw.dgithub.xyz', '美国', '[美国 西雅图] - 该公益加速源由 [dgithub.xyz] 提供 - 缓存:无(或很短)'], - //['https://gh-proxy.ygxz.in//https://raw.githubusercontent.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@一个小站 www.ygxz.in] 提供 - 缓存:无(或很短)'], + //['https://gh-proxy.ygxz.in//https://raw.githubusercontent.com', '美国', '[美国 洛杉矶] - 该公益加速源由 [@一个小站 www.ygxz.in] 提供 - 缓存:无(或很短)'], // 被蔷 //['https://raw.nuaa.cf', '美国', '[美国 洛杉矶] - 该公益加速源由 [FastGit 群组成员] 提供'], // 证书到期 //['https://raw.yzuu.cf', '美国', '[美国 纽约] - 该公益加速源由 [FastGit 群组成员] 提供'], // 证书到期 - //['https://hub.gitmirror.com/raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [GitMirror] 提供 - 缓存:无(或很短)'], - //['https://jsdelivr-cdn.prpservice.990989.xyz/gh', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [PencilNavigator] 提供 - 缓存:有'], + //['https://hub.gitmirror.com/raw.githubusercontent.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [GitMirror] 提供 - 缓存:无(或很短)'], // 域名无解析 + //['https://jsdelivr-cdn.pencilnavrp.990989.xyz/gh', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [PencilNavigator] 提供 - 缓存:有'], //['https://git.yumenaka.net/https://raw.githubusercontent.com', '美国', '[美国 圣何塞]'], // 连接超时 ], svg = [ '' @@ -245,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@"]')) { @@ -306,11 +326,14 @@ // Download ZIP function addDownloadZIP(target) { - let html = target.querySelector('ul[class^=prc-ActionList-ActionList-]>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), @@ -347,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 元素 @@ -378,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 元素 @@ -552,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 6bcc4388e..1938bca0f 100644 --- a/HTML5Volume.user.js +++ b/HTML5Volume.user.js @@ -3,7 +3,7 @@ // @name:zh-CN HTML5 视频音频默认音量 // @name:zh-TW HTML5 視訊音訊預設音量 // @name:ru Громкость аудио-видео в формате HTML5 по умолчанию -// @version 1.0.3 +// @version 1.0.5 // @author X.I.U // @description Avoid being startled by some video/audio with default 100% volume! And support each website to remember the volume separately... // @description:zh-CN 避免被一些默认 100% 音量的视频/音频吓一跳(或社死)!且支持各网站分别记住音量... @@ -34,12 +34,58 @@ let nowVolume = ' (跟随全局)' if (localStorage.getItem('html5_xiu_currentVolume')) nowVolume = ' [ ' + parseInt(localStorage.getItem('html5_xiu_currentVolume')) + '% ]' menu_ID[1] = GM_registerMenuCommand('🔁 忘记当前网站音量' + nowVolume, function(){resetCurrentVolume()}); - menu_ID[2] = GM_registerMenuCommand('💬 反馈 & 建议', function () {GM_openInTab('https://github.com/XIU2/UserScript#xiu2userscript', {active: true,insert: true,setParent: true}); GM_openInTab('https://greasyfork.org/zh-CN/scripts/438400/feedback', {active: true,insert: true,setParent: true});}); + // 强制当前网站使用全局音量(针对部分不支持调节音量的网站) + if (menu_forcedToEnable('check')) { // 当前网站是否已存在强制列表中 + menu_ID[2] = GM_registerMenuCommand('✅ 已强制当前网站使用全局音量 (针对不支持调节音量的)', function(){menu_forcedToEnable('del')}); + menu_ID[4] = GM_registerMenuCommand('#️⃣ 修改当前网站默认音量 (针对不支持调节音量的)', function(){customCurrentDefaultVolume()}); + } else { + menu_ID[2] = GM_registerMenuCommand('❌ 未强制当前网站使用全局音量 (针对不支持调节音量的)', function(){menu_forcedToEnable('add')}); + } + menu_ID[3] = GM_registerMenuCommand('💬 反馈 & 建议', function () {GM_openInTab('https://github.com/XIU2/UserScript#xiu2userscript', {active: true,insert: true,setParent: true}); GM_openInTab('https://greasyfork.org/zh-CN/scripts/438400/feedback', {active: true,insert: true,setParent: true});}); } insPage(); currentPage(); + // 强制当前网站使用全局音量(针对部分不支持调节音量的网站) + function menu_forcedToEnable(type) { + switch(type) { + case 'check': + if(check()) return true + return false + break; + case 'add': + add(); + break; + case 'del': + del(); + break; + } + + function check() { // 存在返回真,不存在返回假 + let websiteList = GM_getValue('menu_forcedToEnable',[]); // 读取网站列表 + if (websiteList.indexOf(location.host) === -1) return false // 不存在返回假 + return true + } + + function add() { + if (check()) return + let websiteList = GM_getValue('menu_forcedToEnable',[]); // 读取网站列表 + websiteList.push(location.host); // 追加网站域名 + GM_setValue('menu_forcedToEnable', websiteList); // 写入配置 + location.reload(); // 刷新网页 + } + + function del() { + if (!check()) return + let websiteList = GM_getValue('menu_forcedToEnable',[]), // 读取网站列表 + index = websiteList.indexOf(location.host); + websiteList.splice(index, 1); // 删除网站域名 + GM_setValue('menu_forcedToEnable', websiteList); // 写入配置 + location.reload(); // 刷新网页 + } + } + // 网页本身的 Video Audio 标签 function currentPage() { @@ -88,12 +134,16 @@ // 判断该视频/音频元素是否已监听事件 function isFirstEvent(target) { - if (!target.controls) return; // 如果视频/音频已经有了自己的控件(即没有使用 HTML5 默认的控件),则退出 + if (!menu_forcedToEnable('check')) { // 如果未强制当前网站使用全局音量(针对部分不支持调节音量的网站) + if (!target.controls) return; // 如果视频/音频已经有了自己的控件(即没有使用 HTML5 默认的控件),则退出 + } modifyVolume(target); - // 如果没有该属性,则代表是还未监听事件 - if (target.dataset.html5VolumeXiu != 'true') { - target.dataset.html5VolumeXiu = 'true' - target.addEventListener('volumechange', volumeChangeEvent); + if (!menu_forcedToEnable('check')) { // 如果未强制当前网站使用全局音量(针对部分不支持调节音量的网站),毕竟不支持音量调节的网站监听音量变化是没有意义的,反而可能会被网站默认静音什么的搞乱 + // 如果没有该属性,则代表是还未监听事件 + if (target.dataset.html5VolumeXiu != 'true') { + target.dataset.html5VolumeXiu = 'true' + target.addEventListener('volumechange', volumeChangeEvent); + } } } @@ -111,8 +161,18 @@ // 修改全局默认音量 function customDefaultVolume() { - let newValue = parseFloat(prompt('修改全局默认音量,不影响各网站记住的音量,当前网页需刷新后生效~\n范围:0~100 (即 0%~100%,不需要加 % 百分号)\n默认:30', GM_getValue('menu_defaultVolume', 30))); + let newValue = parseFloat(prompt('修改全局默认音量,不影响各网站记住的音量,修改后当前网页立即生效~\n范围:0~100 (即 0%~100%,不需要加 % 百分号)\n默认:30', GM_getValue('menu_defaultVolume', 30))); if (!Number.isNaN(newValue) && newValue >= 0 && newValue <= 100) {GM_setValue('menu_defaultVolume', newValue);} + currentPage(); // 重置当前网页的音量 + registerMenuCommand(); // 重新注册菜单(刷新菜单上的音量值) + } + + + // 修改当前网站默认音量 (针对不支持调节音量的网站) + function customCurrentDefaultVolume() { + let newValue = parseFloat(prompt('修改当前网站默认音量 (针对不支持调节音量的网站),修改后立即生效~\n范围:0~100 (即 0%~100%,不需要加 % 百分号)\n默认:全局默认音量', localStorage.getItem('html5_xiu_currentVolume') || GM_getValue('menu_defaultVolume', 30))); + if (!Number.isNaN(newValue) && newValue >= 0 && newValue <= 100) {localStorage.setItem('html5_xiu_currentVolume', newValue);} + currentPage(); // 重置当前网页的音量 registerMenuCommand(); // 重新注册菜单(刷新菜单上的音量值) } @@ -121,5 +181,6 @@ function resetCurrentVolume() { if (localStorage.getItem('html5_xiu_currentVolume')) localStorage.removeItem('html5_xiu_currentVolume') // 清理 localStorage currentPage(); // 重置当前网页的音量 + registerMenuCommand(); // 重新注册菜单(刷新菜单上的音量值) } })(); diff --git a/Hostloc-Enhanced.user.js b/Hostloc-Enhanced.user.js index 4ab680d1c..2a8b2aaca 100644 --- a/Hostloc-Enhanced.user.js +++ b/Hostloc-Enhanced.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name 全球主机交流论坛增强 -// @version 1.4.9 +// @version 1.5.2 // @author X.I.U // @description 自动签到(访问空间 +22 积分)、屏蔽用户(黑名单)、屏蔽关键词(帖子标题)、回帖小尾巴、自动无缝翻页、快捷回到顶部(右键网页两侧空白处)、收起预览帖子(左键网页两侧空白处)、屏蔽投票贴、快速添加链接、屏蔽阅读权限 255 帖子、预览帖子快速回复带签名、显示是否在线、显示帖子内隐藏回复 // @match *://hostloc.com/* @@ -20,8 +20,7 @@ // @supportURL https://github.com/XIU2/UserScript // @homepageURL https://github.com/XIU2/UserScript // ==/UserScript== - -(function() { +(function () { 'use strict'; var menu_ALL = [ ['menu_autoSignIn', '自动签到(22 积分)', '自动签到', true], @@ -35,48 +34,45 @@ ['menu_delate255', '屏蔽阅读权限 255 帖子', '屏蔽阅读权限 255 帖子', true], ['menu_delatePolls', '屏蔽投票帖子', '屏蔽投票帖子', false] ], menu_ID = []; - for (let i=0;i menu_ALL.length){ // 如果菜单ID数组多于菜单数组,说明不是首次添加菜单,需要卸载所有脚本菜单 - for (let i=0;i menu_ALL.length) { // 如果菜单ID数组多于菜单数组,说明不是首次添加菜单,需要卸载所有脚本菜单 + for (let i = 0; i < menu_ID.length; i++) { GM_unregisterMenuCommand(menu_ID[i]); } } - for (let i=0;i -1) { // 帖子内 if (menu_value('menu_thread_pageLoading')) { @@ -161,6 +151,7 @@ showPosts(); // 自动显示帖子内被隐藏的回复 blockUsers('thread'); // 屏蔽用户(黑名单) onlineStatus(); // 显示是否在线 + addBlockButton(); // 添加屏蔽按钮 replyCustom('thread'); // 回复自定义 } else if (patt_forum.test(location.pathname) || location.search.indexOf('mod=forumdisplay') > -1) { // 各板块帖子列表 curSite = DBSite.forum; @@ -172,28 +163,25 @@ vfastpostDOMNodeInserted(); // 监听插入事件(预览快速回复带签名) replyCustom('forum'); // 回复自定义 if (patt_forum.test(location.pathname)) blockDOMNodeInserted(); //监听插入事件(有新的回复主题,点击查看) - }else if (location.search.indexOf('mod=guide') > -1) { // 导读帖子列表 + } else if (location.search.indexOf('mod=guide') > -1) { // 导读帖子列表 curSite = DBSite.guide; - } else if(location.pathname === '/search.php') { // 搜索结果列表 + } else if (location.pathname === '/search.php') { // 搜索结果列表 curSite = DBSite.search; blockUsers('search'); // 屏蔽用户(黑名单) - } else if(location.pathname === '/home.php' && location.search.indexOf('mod=space&do=notice&view=mypost') > -1) { // 消息(帖子/点评/提到) + } else if (location.pathname === '/home.php' && location.search.indexOf('mod=space&do=notice&view=mypost') > -1) { // 消息(帖子/点评/提到) blockUsers('notice'); // 屏蔽用户(黑名单) - } else if(location.pathname === '/home.php' && location.search.indexOf('mod=space&do=pm') > -1) { // 消息(私人聊天) + } else if (location.pathname === '/home.php' && location.search.indexOf('mod=space&do=pm') > -1) { // 消息(私人聊天) blockUsers('pm'); // 屏蔽用户(黑名单) - } else if(location.search.indexOf('mod=space') > -1 && location.search.indexOf('&view=me') > -1) { // 别人的主题/回复 + } else if (location.search.indexOf('mod=space') > -1 && location.search.indexOf('&view=me') > -1) { // 别人的主题/回复 curSite = DBSite.youreply; - } else if(location.pathname === '/forum.php' && location.search.indexOf('mod=post&action=reply') > -1 || location.pathname === '/forum.php' && location.search.indexOf('mod=post&action=newthread') > -1) { // 回复:高级回复 + } else if (location.pathname === '/forum.php' && location.search.indexOf('mod=post&action=reply') > -1 || location.pathname === '/forum.php' && location.search.indexOf('mod=post&action=newthread') > -1) { // 回复:高级回复 replyCustom('reply'); // 回复自定义 } - curSite.pageUrl = ""; // 下一页URL pageLoading(); // 自动翻页 - backToTop(); // 回到顶部(右键点击左右两侧空白处) - if(menu_value('menu_autoSignIn')) autoSignIn(); // 自动签到(访问空间 10 次 = 20 积分) + backToTop(); // 回到顶部(右键点击左右两侧空白处) + if (menu_value('menu_autoSignIn')) autoSignIn(); // 自动签到(访问空间 10 次 = 20 积分) //replyIntervalDOMNodeInserted(); // 监听插入事件(回帖间隔) - - // 自动签到(访问空间 10 次 = 20 积分 + 当天首次访问论坛 2 积分) function autoSignIn() { if (!loginStatus) return @@ -201,13 +189,13 @@ timeOld = GM_getValue('menu_signInTime'); if (!timeOld || timeOld != timeNow) { // 是新的一天 GM_setValue('menu_signInTime', timeNow); // 写入签到时间以供后续比较 - GM_notification({text: '请不要关闭/刷新本页!耐心等待 60 秒~\n在此期间可以在 "其他标签页" 浏览论坛!', timeout: 10000}); + GM_notification({ text: '请不要关闭/刷新本页!耐心等待 60 秒~\n在此期间可以在 "其他标签页" 浏览论坛!', timeout: 10000 }); let url_list = [], url = 0; // 随机生成 12 个空间地址(2 个冗余) - for(let i = 0;i < 12;i++){url_list[i] = "https://" + location.host + "/space-uid-" + Math.floor(Math.random()*(50000-10000+1)+10000) + ".html";} + for (let i = 0; i < 12; i++) { url_list[i] = "https://" + location.host + "/space-uid-" + Math.floor(Math.random() * (50000 - 10000 + 1) + 10000) + ".html"; } // 每 5 秒访问一次(避免触发网站防御机制,而且还可以适当浏览论坛) - let signIn = setInterval(function(){ + let signIn = setInterval(function () { GM_xmlhttpRequest({ url: url_list[url++], method: 'GET', @@ -217,25 +205,21 @@ if (url === 11) { // 次数够了就取消定时循环 clearInterval(signIn); console.log('[全球主机交流论坛 增强] 签到完成!'); - GM_notification({text: '签到完成!积分 +22 ~', timeout: 3500}); + GM_notification({ text: '签到完成!积分 +22 ~', timeout: 3500 }); } }, 5000); } } - - // 重新签到 function reAutoSignIn() { GM_setValue('menu_signInTime', '1970/1/1'); // 设置为比当前日期更早 location.reload(); // 刷新网页 } - - // 自定义屏蔽用户 function customBlockUsers() { let nowBlockUsers = ''; - GM_getValue('menu_customBlockUsers').forEach(function(item){nowBlockUsers += '|' + item}) - let newBlockUsers = prompt('编辑 [自定义屏蔽用户],刷新网页后生效\n(不同用户名之间使用 "|" 分隔,\n(例如:用户A|用户B|用户C,如果只有一个就不需要 "|" 了。', nowBlockUsers.replace('|','')); + GM_getValue('menu_customBlockUsers').forEach(function (item) { nowBlockUsers += '|' + item }) + let newBlockUsers = prompt('编辑 [自定义屏蔽用户],刷新网页后生效\n(不同用户名之间使用 "|" 分隔,\n(例如:用户A|用户B|用户C,如果只有一个就不需要 "|" 了。', nowBlockUsers.replace('|', '')); if (newBlockUsers === '') { GM_setValue('menu_customBlockUsers', []); registerMenuCommand(); // 重新注册脚本菜单 @@ -244,12 +228,10 @@ registerMenuCommand(); // 重新注册脚本菜单 } }; - - // 屏蔽用户 function blockUsers(type) { if (!menu_value('menu_customBlockUsers') || menu_value('menu_customBlockUsers').length < 1) return - switch(type) { + switch (type) { case 'thread': // 帖子内 blockUsers_('[id^="post_"]', 'a[href^="space-uid"]'); blockUsers_('[id^="comment_"] > div', 'a.xi2.xw1'); // 点评 @@ -269,10 +251,9 @@ blockUsers_('dl[id^="pmlist_"]', '.ptm.pm_c a[href^="space-uid"]'); break; } - function blockUsers_(list1, list2, type) { - document.querySelectorAll(list1).forEach(function(item){ // 遍历所有帖子 - menu_value('menu_customBlockUsers').forEach(function(item1){ // 遍历用户黑名单 + document.querySelectorAll(list1).forEach(function (item) { // 遍历所有帖子 + menu_value('menu_customBlockUsers').forEach(function (item1) { // 遍历用户黑名单 let itemName = item.querySelector(list2); // 寻找用户名 if (itemName) { if (type && type === 1 && itemName.textContent.split(' ')[0] === item1) { // 回复引用 @@ -286,12 +267,11 @@ }) }) } - function blockUsers_vfastpost() { let vfastpost = e => { if (e.target.nodeType == 1 && e.target.outerHTML && e.target.outerHTML.indexOf('class="fastpreview"') > -1) { - e.target.querySelectorAll('.bm_c > [id^="post_"]').forEach(function(item){ // 遍历所有回复 - menu_value('menu_customBlockUsers').forEach(function(item1){ // 遍历用户黑名单 + e.target.querySelectorAll('.bm_c > [id^="post_"]').forEach(function (item) { // 遍历所有回复 + menu_value('menu_customBlockUsers').forEach(function (item1) { // 遍历用户黑名单 let itemName = item.querySelector('a.xi2'); // 寻找用户名 if (itemName && itemName.textContent === item1) { console.log(`屏蔽用户:${item1}`); @@ -309,13 +289,11 @@ document.addEventListener('DOMNodeInserted', vfastpost); // 监听插入事件 } } - - // 自定义屏蔽关键词(帖子标题) function customBlockKeywords() { let nowBlockKeywords = ''; - GM_getValue('menu_customBlockKeywords').forEach(function(item){nowBlockKeywords += '|' + item}) - let newBlockKeywords = prompt('编辑 [自定义屏蔽关键词],刷新网页后生效\n(不同关键词之间使用 "|" 分隔,\n(例如:助力|互助|互点,如果只有一个就不需要 "|" 了。', nowBlockKeywords.replace('|','')); + GM_getValue('menu_customBlockKeywords').forEach(function (item) { nowBlockKeywords += '|' + item }) + let newBlockKeywords = prompt('编辑 [自定义屏蔽关键词],刷新网页后生效\n(不同关键词之间使用 "|" 分隔,\n(例如:助力|互助|互点,如果只有一个就不需要 "|" 了。', nowBlockKeywords.replace('|', '')); if (newBlockKeywords === '') { GM_setValue('menu_customBlockKeywords', []); registerMenuCommand(); // 重新注册脚本菜单 @@ -324,13 +302,11 @@ registerMenuCommand(); // 重新注册脚本菜单 } }; - - // 屏蔽关键词(帖子标题) function blockKeywords() { if (!menu_value('menu_customBlockKeywords') || menu_value('menu_customBlockKeywords').length < 1) return - document.querySelectorAll('[id^="normalthread_"]').forEach(function(item){ // 遍历所有帖子标题 - menu_value('menu_customBlockKeywords').forEach(function(item1){ // 遍历关键词 + document.querySelectorAll('[id^="normalthread_"]').forEach(function (item) { // 遍历所有帖子标题 + menu_value('menu_customBlockKeywords').forEach(function (item1) { // 遍历关键词 let itemName = item.querySelector('a.s.xst'); // 寻找帖子标题 if (itemName && itemName.textContent.toLowerCase().indexOf(item1.toLowerCase()) > -1) { console.log(`屏蔽关键词:[${item1}]`, `,帖子标题:[${itemName.textContent}]`); @@ -339,8 +315,6 @@ }) }) } - - // 监听插入事件(有新的回复主题,点击查看) function blockDOMNodeInserted() { let block = e => { @@ -353,8 +327,6 @@ } document.addEventListener('DOMNodeInserted', block); // 监听插入事件 } - - // 监听插入事件(预览快速回复带签名) function vfastpostDOMNodeInserted() { let vfastpost = e => { @@ -364,8 +336,6 @@ } document.addEventListener('DOMNodeInserted', vfastpost); // 监听插入事件 } - - // 自定义小尾巴内容 function customLittleTail() { let newLittleTail = prompt('编辑 [自定义小尾巴内容],刷新网页后生效(换行请使用 \\n\n提示①:记得在小尾巴前面加上几个 \\n 换行,用来分隔开回帖内容~\n提示②:建议使用 [align=right] 标签来使小尾巴居右~\n提示③:支持论坛富文本标签(建议先找个回复编辑预览好~\n示例:\\n\\n\\n\\n[align=right]第一行内容~\\n第二行内容~[/align]', GM_getValue('menu_customLittleTail')); @@ -377,11 +347,9 @@ registerMenuCommand(); // 重新注册脚本菜单 } }; - - // 回复自定义 function replyCustom(type) { - switch(type) { + switch (type) { case 'forum': // 各版块帖子列表的预览帖子 replyCustom_0(); // 预览帖子 快速回复(底部) replyCustom_1(); // 预览帖子 回复(悬浮) @@ -394,26 +362,24 @@ replyCustom_3(); break; } - function replyCustom_0() { let vfastpost = e => { if (e.target.nodeType == 1 && e.target.innerHTML && e.target.innerHTML.indexOf('id="vfastpost"') > -1) { let message = e.target.querySelector('input[name="message"]'), id = message.id.match(/\d+/g)[0]; message.parentNode.innerHTML = `` - document.getElementById(`vreplysubmit_${id}`).onclick = function(){ + document.getElementById(`vreplysubmit_${id}`).onclick = function () { if (GM_getValue('menu_customLittleTail')) document.getElementById(`vmessage_${id}`).value += GM_getValue('menu_customLittleTail').replaceAll('\\n', '\n'); } } } document.addEventListener('DOMNodeInserted', vfastpost); // 监听插入事件 } - function replyCustom_1() { let floatlayout_reply = e => { if (e.target.nodeType == 1 && e.target.innerHTML && e.target.innerHTML.indexOf('id="floatlayout_reply"') > -1) { // 快速回复(悬浮)中添加 URL 按钮 document.querySelector('#floatlayout_reply .fbld').insertAdjacentHTML('afterend', `URL`); - document.getElementById('postsubmit').onclick = function(){ + document.getElementById('postsubmit').onclick = function () { if (GM_getValue('menu_customLittleTail')) document.getElementById('postmessage').value += GM_getValue('menu_customLittleTail').replaceAll('\\n', '\n'); } } @@ -422,24 +388,20 @@ // 快速发帖(各版块帖子列表底部)中添加 URL 按钮 document.querySelector('#fastposteditor .fbld').insertAdjacentHTML('afterend', `URL`); } - function replyCustom_2() { // 帖子底部的回复框 - document.getElementById('fastpostsubmit').onclick = function(){ + document.getElementById('fastpostsubmit').onclick = function () { if (GM_getValue('menu_customLittleTail')) document.getElementById('fastpostmessage').value += GM_getValue('menu_customLittleTail').replaceAll('\\n', '\n'); } } - function replyCustom_3() { let postsubmit = document.getElementById('postsubmit'); if (postsubmit && postsubmit.textContent === '\n参与/回复主题\n' || postsubmit && postsubmit.textContent === '\n发表帖子\n') { - postsubmit.onclick = function(){ + postsubmit.onclick = function () { if (GM_getValue('menu_customLittleTail')) document.getElementById('e_textarea').value += GM_getValue('menu_customLittleTail').replaceAll('\\n', '\n'); } } } } - - // 监听插入事件(回帖间隔) /*function replyIntervalDOMNodeInserted() { let replyInterval = e => { @@ -449,72 +411,113 @@ } document.addEventListener('DOMNodeInserted', replyInterval); // 监听插入事件 }*/ - - // 自动显示帖子内被隐藏的回复 function showPosts() { - if(menu_value('menu_showhide')){ + if (menu_value('menu_showhide')) { let showposts = document.querySelector('#hiddenpoststip a'); - if (showposts){ // 如果存在 + if (showposts) { // 如果存在 showposts.click(); } } } - - // 隐藏帖子内的 [下一页] 按钮 function hidePgbtn() { document.lastChild.appendChild(document.createElement('style')).textContent = '.pgbtn {display: none;}'; } - - // 快捷回到顶部(右键左右两侧空白处) function backToTop() { - document.body.oncontextmenu = function(event){ + document.body.oncontextmenu = function (event) { if (event.target == this) { event.preventDefault(); - window.scrollTo(0,0) + window.scrollTo(0, 0) } } } - - // 收起帖子预览(左键左右两侧空白处) function collapsedNowPost() { - document.body.onclick = function(event){ + document.body.onclick = function (event) { if (event.target == this) { document.querySelectorAll('[id^="threadPreviewTR_"] .closeprev').forEach(function (el) { if (!el.parentElement.querySelector('[name="message"]') || el.parentElement.querySelector('[name="message"]').value === '' && !document.getElementById('fwin_reply')) { // 避免快速回复过程中误点收起了 let parentElement = el.parentElement.parentElement.parentElement.parentElement.parentElement, top = parentElement.offsetTop + parentElement.offsetParent.offsetTop + parentElement.offsetParent.offsetParent.offsetTop; // 元素距离顶部的高度 - if (top < document.documentElement.scrollTop) window.scrollTo(0,top) // 帖子标题在上面时才会滚动到该帖子处 + if (top < document.documentElement.scrollTop) window.scrollTo(0, top) // 帖子标题在上面时才会滚动到该帖子处 el.click() } }); } } } - - // 显示在线状态 function onlineStatus() { - document.querySelectorAll('[id^="favatar"]').forEach(function(item){ // 遍历所有帖子 + document.querySelectorAll('[id^="favatar"]').forEach(function (item) { // 遍历所有帖子 if (item.querySelector('[id^="userinfo"] > .i.y em')) { let icon = (item.querySelector('[id^="userinfo"] > .i.y em').textContent === '当前在线') ? '🌝' : '🌚'; let divStatus = document.createElement('div'); - divStatus.style = 'position: absolute;margin: -8px 0 0 8px;padding: 0 1px 1.2px;background-color: #ffffff;border-radius: 50%;'; + divStatus.style = 'position: absolute;margin: -8px 0 0 8px;padding: 0px 1px;background-color: #ffffff;border-radius: 50%;z-index: 302;'; divStatus.textContent = icon; let mochu = item.querySelector('.avatar'); - mochu.parentNode.insertBefore(divStatus,mochu); + mochu.parentNode.insertBefore(divStatus, mochu); } }) } + // 添加屏蔽按钮 + function addBlockButton() { + document.querySelectorAll('[id^="favatar"]').forEach(function (item) { // 遍历所有帖子 + let usernameLink = item.querySelector('a[href^="space-uid"]'); + if (usernameLink) { + const username = usernameLink.textContent, avatar = item.querySelector('.avatar'); + if (avatar && !avatar.parentNode.querySelector('.XIU-block-button')) { + // 创建屏蔽按钮 + let blockButton = document.createElement('div'); + blockButton.className = 'XIU-block-button'; + blockButton.title = `屏蔽用户: ${username}`; + blockButton.textContent = '🚫'; + blockButton.style.cssText = 'position: absolute;margin: -8px 0px 0px 8px;padding: 0px 0.5px;top: 0px;right: 10px;background-color: #F26C4F;border-radius: 50%;cursor: pointer;z-index: 302;box-shadow: 0 2px 4px rgba(0,0,0,0.2);transition: all 0.3s ease;'; + + // 鼠标悬停效果 + if (!document.getElementById('XIU-block-style')) { + let blockStyle = document.createElement('style'); + blockStyle.id = 'XIU-block-style'; + document.documentElement.appendChild(blockStyle).textContent = '.XIU-block-button:hover{transform: scale(1.2);background-color: #ff6666;}' + } + // 点击事件 + blockButton.addEventListener('click', function (e) { + e.preventDefault(); + e.stopPropagation(); + + if (confirm(`确定要将用户 "${username}" 添加到黑名单吗?\n添加后该用户发布的任何内容都会被屏蔽`)) { + let blockList = GM_getValue('menu_customBlockUsers') || []; + if (!blockList.includes(username)) { + blockList.push(username); + GM_setValue('menu_customBlockUsers', blockList); + GM_notification({ text: `已将用户 "${username}" 添加到黑名单!\n刷新页面后生效。`, timeout: 3000 }); + + // 立即隐藏当前用户的帖子 + let postElement = item.closest('[id^="post_"]'); + if (postElement) { + postElement.style.opacity = '0.5'; + postElement.style.transition = 'opacity 0.5s ease'; + setTimeout(() => { postElement.hidden = true; }, 500); + } + } else { + GM_notification({ text: `用户 "${username}" 已在黑名单中!`, timeout: 2000 }); + } + } + }); + // 将按钮添加到头像旁边 + avatar.parentNode.style.position = 'relative'; + avatar.parentNode.appendChild(blockButton); + } + } + }); + } // 屏蔽阅读权限 255 的帖子 function delate255() { if (!menu_value('menu_delate255')) return - if (patt_forum.test(location.pathname) || location.search.indexOf('mod=forumdisplay') > -1){ + if (patt_forum.test(location.pathname) || location.search.indexOf('mod=forumdisplay') > -1) { document.querySelectorAll('tbody[id^="normalthread_"] .xw1').forEach(function (_this) { if (_this.textContent === '255') { _this.parentNode.parentNode.parentNode.hidden = true; @@ -522,32 +525,28 @@ }) } } - - // 屏蔽投票贴 function delatePolls() { if (!menu_value('menu_delatePolls')) return - if (patt_forum.test(location.pathname) || location.search.indexOf('mod=forumdisplay') > -1){ + if (patt_forum.test(location.pathname) || location.search.indexOf('mod=forumdisplay') > -1) { document.querySelectorAll('tbody[id^="normalthread_"] .icn>a>img[alt="投票"]').forEach(function (_this) { - _this.parentNode.parentNode.parentNode.parentNode.hidden = true; + _this.parentNode.parentNode.parentNode.parentNode.hidden = true; }) } } - - // 自动翻页 function pageLoading() { if (!menu_value('menu_pageLoading')) return - if (curSite.SiteTypeID > 0){ + if (curSite.SiteTypeID > 0) { windowScroll(function (direction, e) { if (direction === 'down') { // 下滑才准备翻页 let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop; if (document.documentElement.scrollHeight <= document.documentElement.clientHeight + scrollTop + 999) { if (curSite.SiteTypeID === SiteType.FORUM) { // 如果是各版块帖子列表则直接点下一页就行了 let autopbn = document.querySelector('#autopbn'); - if (autopbn && autopbn.textContent === "下一页 »"){ // 如果已经在加载中了,就忽略 + if (autopbn && autopbn.textContent === "下一页 »") { // 如果已经在加载中了,就忽略 autopbn.click(); - let timer = setInterval(function(){ // 在下一页加载完成后 + let timer = setInterval(function () { // 在下一页加载完成后 if (document.querySelector('#autopbn').textContent === '下一页 »') { delate255(); // 屏蔽 255 权限帖子 delatePolls(); // 屏蔽投票贴子 @@ -565,12 +564,10 @@ }); } } - - // 滚动条事件 function windowScroll(fn1) { var beforeScrollTop = document.documentElement.scrollTop, - fn = fn1 || function () {}; + fn = fn1 || function () { }; setTimeout(function () { // 延时执行,避免刚载入到页面就触发翻页事件 window.addEventListener('scroll', function (e) { var afterScrollTop = document.documentElement.scrollTop, @@ -581,31 +578,29 @@ }, false); }, 1000) } - - // 修改自 https://greasyfork.org/scripts/14178 , https://github.com/machsix/Super-preloader var ShowPager = { getFullHref: function (e) { - if (e != null && e.nodeType === 1 && e.href && e.href.slice(0,4) === 'http') return e.href; + if (e != null && e.nodeType === 1 && e.href && e.href.slice(0, 4) === 'http') return e.href; return ''; }, createDocumentByString: function (e) { if (e) { if ('HTML' !== document.documentElement.nodeName) return (new DOMParser).parseFromString(e, 'application/xhtml+xml'); var t; - try { t = (new DOMParser).parseFromString(e, 'text/html');} catch (e) {} + try { t = (new DOMParser).parseFromString(e, 'text/html'); } catch (e) { } if (t) return t; if (document.implementation.createHTMLDocument) { t = document.implementation.createHTMLDocument('ADocument'); } else { - try {((t = document.cloneNode(!1)).appendChild(t.importNode(document.documentElement, !1)), t.documentElement.appendChild(t.createElement('head')), t.documentElement.appendChild(t.createElement('body')));} catch (e) {} + try { ((t = document.cloneNode(!1)).appendChild(t.importNode(document.documentElement, !1)), t.documentElement.appendChild(t.createElement('head')), t.documentElement.appendChild(t.createElement('body'))); } catch (e) { } } if (t) { var r = document.createRange(), n = r.createContextualFragment(e); r.selectNodeContents(document.body); t.body.appendChild(n); - for (var a, o = { TITLE: !0, META: !0, LINK: !0, STYLE: !0, BASE: !0}, i = t.body, s = i.childNodes, c = s.length - 1; c >= 0; c--) o[(a = s[c]).nodeName] && i.removeChild(a); + for (var a, o = { TITLE: !0, META: !0, LINK: !0, STYLE: !0, BASE: !0 }, i = t.body, s = i.childNodes, c = s.length - 1; c >= 0; c--) o[(a = s[c]).nodeName] && i.removeChild(a); return t; } } else console.error('没有找到要转成 DOM 的字符串'); @@ -614,8 +609,8 @@ if (curSite.pager) { let curPageEle = document.querySelector(curSite.pager.nextLink); var url = this.getFullHref(curPageEle); - if(url === '') return; - if(curSite.pageUrl === url) return;// 不会重复加载相同的页面 + if (url === '') return; + if (curSite.pageUrl === url) return;// 不会重复加载相同的页面 curSite.pageUrl = url; // 读取下一页的数据 curSite.pager.startFilter && curSite.pager.startFilter(); @@ -632,9 +627,12 @@ let addTo = "beforeend"; if (curSite.pager.HT_insert[1] == 1) addTo = 'beforebegin'; // 插入新页面元素 - pageElems.forEach(function (one) {toElement.insertAdjacentElement(addTo, one);}); + pageElems.forEach(function (one) { toElement.insertAdjacentElement(addTo, one); }); // 屏蔽用户(黑名单) - if (patt_thread.test(location.pathname) || location.search.indexOf('mod=viewthread') > -1) {blockUsers('thread');} else if (location.pathname === '/search.php') {blockUsers('search');} + if (patt_thread.test(location.pathname) || location.search.indexOf('mod=viewthread') > -1) { + blockUsers('thread'); + addBlockButton(); // 添加屏蔽按钮 + } else if (location.pathname === '/search.php') { blockUsers('search'); } delate255(); // 屏蔽 255 权限帖子 delatePolls(); // 屏蔽投票贴子 // 替换待替换元素 diff --git a/Lanzou-Enhanced.user.js b/Lanzou-Enhanced.user.js index f0a30b9ef..ed8e63cd4 100644 --- a/Lanzou-Enhanced.user.js +++ b/Lanzou-Enhanced.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name 蓝奏云网盘增强 -// @version 1.5.6 +// @version 1.5.8 // @author X.I.U // @description 文件排序、刷新不回根目录、快捷返回上一级(右键网页空白处)、后退返回上一级、右键文件显示菜单、点击直接下载文件、点击空白进入目录、自动显示更多文件、一键复制所有分享链接、自定义分享链接域名、自动打开/复制分享链接、带密码的分享链接自动输密码、拖入文件自动显示上传框、输入密码后回车确认、优化编辑框初始大小 // @match *://lanzou.com/u @@ -52,6 +52,7 @@ // @match *://*.lanzj.com/* // @match *://*.lanzl.com/* // @match *://*.lanzm.com/* +// @match *://*.lanzn.com/* // @match *://*.lanzo.com/* // @match *://*.lanzp.com/* // @match *://*.lanzq.com/* @@ -347,10 +348,10 @@ if (iframe) { // 只有找到 iframe 框架时才会继续运行脚本 iframe = iframe.contentWindow; let timer = setInterval(function(){ - if (iframe.document.querySelector('.load>[href]')) { - //iframe.document.querySelector('.load>a[href]').target = '_top' - //iframe.document.querySelector('.load>a[href]').click(); - GM_openInTab(iframe.document.querySelector('.load>a[href]').href, {active: false, insert: true, setParent: false}); // 后台打开 + if (iframe.document.querySelector('.load [href]')) { + //iframe.document.querySelector('.load a[href]').target = '_top' + //iframe.document.querySelector('.load a[href]').click(); + GM_openInTab(iframe.document.querySelector('.load a[href]').href, {active: false, insert: true, setParent: false}); // 后台打开 clearInterval(timer); // 关闭该后台标签页 if (GM_info.scriptHandler === 'Violentmonkey') { // Violentmonkey 需要延迟一会儿 diff --git a/README.md b/README.md index bafb2b6bd..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,6 +78,12 @@ 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) @@ -88,9 +94,6 @@ Tampermonkey 为了顺应 Chrome 的 Manifest V3 要求,在 v5.0.0 版本中 Powered by DartNode -> 该赞助者向本项目提供了**公益服务器**用以优化体验! -> This sponsor has provided **a non-profit server** for this project to enhance the user experience! - ## License The GPL-3.0 License. \ No newline at end of file diff --git a/Zhihu-Beautification.user.js b/Zhihu-Beautification.user.js index 528062969..584671e36 100644 --- a/Zhihu-Beautification.user.js +++ b/Zhihu-Beautification.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name 知乎美化 -// @version 1.5.16 +// @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,7 +212,7 @@ 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;}} `, @@ -246,9 +255,9 @@ html[data-theme=light] .AppHeader-notifications:not([aria-label=通知])>div:fir 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;} `, @@ -284,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;} @@ -474,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; @@ -489,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 3b034e65b..48c150978 100644 --- a/Zhihu-Enhanced.user.js +++ b/Zhihu-Enhanced.user.js @@ -3,11 +3,11 @@ // @name:zh-CN 知乎增强 // @name:zh-TW 知乎增強 // @name:ru Улучшение Zhihu -// @version 2.3.15 +// @version 2.3.28 // @author X.I.U // @description A more personalized Zhihu experience~ -// @description:zh-CN 屏蔽指定类别(视频、盐选、文章、想法、关注[赞同了XX/关注了XX]等等)、屏蔽用户、屏蔽关键词、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回到顶部(右键两侧)、区分问题文章、移除高亮链接、净化搜索热门、净化标题消息、展开问题描述、显示问题作者、默认高清原图(无水印)、置顶显示时间、完整问题时间、直达问题按钮、默认站外直链... -// @description:zh-TW 屏蔽指定類別(視頻、鹽選、文章、想法、關注[贊同了XX/關注了XX]等等)、屏蔽用戶、屏蔽關鍵詞、默認收起回答、快捷收起回答/評論、快捷回到頂部、區分問題文章、移除高亮鏈接、默認高清原圖(無水印)、默認站外直鏈... +// @description:zh-CN 移除登录弹窗、屏蔽指定类别(视频、盐选、文章、想法、关注[赞同/关注了XX]等)、屏蔽低赞/低评回答、屏蔽用户、屏蔽关键词、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回到顶部(右键两侧)、区分问题文章、移除高亮链接、净化搜索热门、净化标题消息、展开问题描述、显示问题作者、默认高清原图(无水印)、置顶显示时间、完整问题时间、直达问题按钮、默认站外直链... +// @description:zh-TW 移除登錄彈窗、屏蔽指定類別(視頻、鹽選、文章、想法、關注[贊同/關注了XX]等)、屏蔽低贊/低評回答、屏蔽用戶、屏蔽關鍵詞、默認收起回答、快捷收起回答/評論、快捷回到頂部、區分問題文章、移除高亮鏈接、默認高清原圖(無水印)、默認站外直鏈... // @description:ru Более персонализированный опыт пользования сайтом Zhihu~ // @match *://www.zhihu.com/* // @match *://zhuanlan.zhihu.com/* @@ -36,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], @@ -73,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) } @@ -423,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 = ''; @@ -447,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; @@ -750,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 = ''; @@ -1184,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() { @@ -1310,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) // 发布时间置顶 @@ -1343,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'); } } @@ -1459,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); // 默认站外直链 @@ -1518,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'); // 屏蔽指定类别(视频/文章等) @@ -1585,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 7583d672b..c5c32cd15 100644 --- a/other/Autopage/rules.json +++ b/other/Autopage/rules.json @@ -2,7 +2,7 @@ "百度搜索": { "host": ["www.baidu.com","ipv6.baidu.com"], "url": "fun.isUrlC(); if (fun.isMobile()) {location.hostname = 'm.baidu.com';} else {return (fun.lp() == '/s')}", - "style": ".new-pmd .c-img-border {position: initial !important;} .op-bk-polysemy-video__wrap.c-gap-bottom {display: none !important;}", + "style": ".new-pmd .c-img-border {position: initial !important;} .op-bk-polysemy-video__wrap.c-gap-bottom, #content_left:not([style])>.result-op[tpl='new_baikan_index'], #content_left:not([style])>.result-op[tpl='ai_ask'] {display: none !important;}", "history": true, "pager": { "nextL": "#page strong+a:not(.n)", @@ -35,14 +35,9 @@ "host": "/^www\\.google\\./", "url": "return (fun.lp() == '/search' && (!fun.indexOF('tbm=','s') || (fun.indexOF('tbm=nws','s') || fun.indexOF('tbm=vid','s') || fun.indexOF('tbm=bks','s'))) && (fun.indexOF('sclient=mobile','s') || fun.isMobile()))", "pager": { - "nextL": "footer>div:first-child a[aria-label]", - "pageE": "id('main')/div[position()>1][position()div", + "isHidden": true } }, "谷歌搜索": { @@ -51,19 +46,16 @@ "history": true, "pager": { "nextL": "#pnnext,footer>div:first-child a[aria-label]", - "pageE": "id('search')/div | id('rso')/div | //style[not(contains(text(),'table,div,span,p{display:none}'))] | //body/script[@nonce][not(@src)][starts-with(text(),'(function(){var s=') or starts-with(text(),'(function(){google.ldi')]", + "pageE": "id('search')/div | id('rso')/div | //style[not(contains(text(),'table,div,span,p{display:none}'))] | //body//script[@nonce][not(@src)][contains(text(),'_setImagesSrc')]", "replaceE": "#navcnt,#rcnt div[role='navigation'],#botstuff div[role='navigation'],#main>footer>div:first-child", "scriptT": 2, "scrollD": 2500 - }, - "function": { - "bF": "fun.getAllCSS('#search img[id^=dimg],#search img[id^=rimg],#rso img[id^=dimg],#rso img[id^=rimg]').forEach(function (img) {img.id = 'old_'+img.id;}); if(!fun.indexOF('tbm=vid','s') && fun.indexOF('tbm=','s')){return pageE}else{pageE.forEach(function (img) {fun.getAllCSS('img[id^=dimg]:not([data-atf])',img).forEach(function (img1) {img1.setAttribute('data-atf','1');})}); return pageE}" } }, "必应搜索 + 手机版": { "host": ["www.bing.com","cn.bing.com","www4.bing.com","global.bing.com"], - "url": "if (fun.lp() == '/search') {if (fun.isMobile() && document.documentElement.lang != 'zh') {return false;} else {return true;}}", - "style": "#b_footer,.b_msg,#bnp_rich_div", + "url": "fun.isUrlC();if (fun.lp() == '/search') {if (fun.isMobile()){rule.blank=3;rule.pager.type=6;rule.pager.loadTime=1000;};return true;}", + "style": "#b_footer,.b_msg,#bnp_rich_div,.cn_related_search_upsell_container", "history": true, "pager": { "nextL": "a.sb_pagN,a.sb_halfnext,a.sb_fullnpl", @@ -197,9 +189,19 @@ "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", @@ -208,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": { @@ -307,43 +309,6 @@ "pageE": ".text-result, .image-wrapper" } }, - "百度贴吧 - 搜索页": { - "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, - "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))" - } - }, "豆瓣": { "host": "movie.douban.com", "url": "/^\\/(explore|tv\\/)/", @@ -650,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" } }, @@ -693,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/", @@ -706,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/'))", @@ -818,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/", @@ -912,6 +906,15 @@ "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;}", @@ -921,6 +924,15 @@ "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'))", @@ -941,8 +953,8 @@ "replaceE": ".pages" } }, - "archlinuxcn - bbs": { - "host": "bbs.archlinuxcn.org", + "archlinux - bbs": { + "host": ["bbs.archlinux.org","bbs.archlinuxcn.org"], "url": "/^\\/(viewforum|viewtopic)\\.php/", "blank": 3, "pager": { @@ -951,8 +963,8 @@ "replaceE": ".pagelink" } }, - "archlinuxcn - wiki": { - "host": "wiki.archlinuxcn.org", + "archlinux - wiki": { + "host": ["wiki.archlinux.org","wiki.archlinuxcn.org"], "url": "/^\\/wzh\\/index\\.php/", "blank": 3, "pager": { @@ -962,17 +974,17 @@ } }, "archlinux - aur": { - "host": "aur.archlinux.org", + "host": ["archlinux.org","aur.archlinux.org"], "url": "/^\\/packages/", "blank": 3, "pager": { - "nextL": "span.page+a.page", + "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()='»')]", @@ -981,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": { @@ -994,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": { @@ -1004,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()='»')]", @@ -1179,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/", @@ -1199,7 +1221,7 @@ } }, "nodeseek": { - "host": "www.nodeseek.com", + "host": ["www.nodeseek.com","www.deepflood.com"], "url": "return fun.isPager()", "pager": { "nextL": "a.pager-next", @@ -1214,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 - 用户作品页": { @@ -1224,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 - 手机版 - 分类页": { @@ -1234,7 +1256,7 @@ "iframe": true, "pager": { "type": 5, - "nextL": "a.next" + "nextL": "button[aria-current=true]+a" } }, "Pixiv - 手机版 - 用户作品页": { @@ -1488,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)\\//)", @@ -2012,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": { @@ -2080,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'))", @@ -2147,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": { @@ -2157,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": { @@ -2242,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'))", @@ -2710,7 +2778,7 @@ } }, "YTS": { - "host": "yts.mx", + "host": ["yts.bz","yts.lt","yts.gg","yts.am","yts.ag"], "url": "/^\\/browse-movies/", "blank": 3, "pager": { @@ -2771,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\\//", @@ -2790,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": { @@ -2809,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')))", @@ -2819,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/", @@ -2911,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" } @@ -2920,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" @@ -2948,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", @@ -3225,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;}", @@ -3299,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);}", @@ -3441,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": { @@ -3451,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, @@ -3464,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 动漫": { @@ -3520,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);}", @@ -3617,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/'))", @@ -3842,6 +4018,28 @@ "replaceE": ".prenext,.page" } }, + "爱下电子书": { + "host": "ixdzs8.com", + "url": "return (fun.indexOF(/^\\/read\\/.+\\.html$/) || fun.isPager())", + "pager": { + "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/", @@ -3886,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()'" } }, @@ -3924,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" } }, "哔哩轻小说 - 手机版 - 文库": { @@ -3947,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/", @@ -4019,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'))", @@ -4117,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 } @@ -4923,7 +5177,7 @@ "blank": 4, "pager": { "nextL": "a[data-testid=pagination-next-button]:not([aria-disabled])", - "pageE": "div[class^='prc-Timeline-Timeline-']>div>div" + "pageE": "div[class^='prc-Timeline-Timeline-']>div" } }, "Github - Tags": { @@ -5068,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')", @@ -5179,9 +5444,9 @@ "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": { @@ -5262,7 +5527,7 @@ "pager": { "type": 6, "nextL": ".a-selected+li.a-normal>a", - "pageE": "#gridItemRoot", + "pageE": ".a-ordered-list>li.zg-no-numbers", "replaceE": ".a-pagination", "loadTime": 7000, "scrollD": 1000 @@ -5360,7 +5625,7 @@ } }, "kmoe": { - "host": ["mox.moe","kox.moe","kxo.moe","koz.moe"], + "host": ["mox.moe","kox.moe","kxo.moe","koz.moe","kxx.moe","kzz.moe"], "url": "return fun.isPager()", "blank": 3, "pager": { @@ -5435,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/'))", @@ -5445,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() != '/')", @@ -5513,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/", @@ -5614,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": { @@ -5759,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": { @@ -5854,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/'))", @@ -5874,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/))", @@ -5909,6 +6265,26 @@ "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()", @@ -5959,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": { @@ -5987,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')", @@ -6340,7 +6729,7 @@ } }, "hanime1": { - "host": "hanime1.me", + "host": ["hanime1.me","hanimeone.me"], "url": "/^\\/search/", "blank": 3, "pager": { @@ -6354,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": { @@ -6369,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": { @@ -6594,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;}", @@ -6667,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']", @@ -6686,19 +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],.photos>div,.media,.static-container-4,.static-container-5,.recommendation_widget", + "style": ".quickGuide,.outer-banner,.item[class*=exoclick],.item[class=item],.photos>div,.media,.static-container-4,.static-container-5,.recommendation_widget", "pager": { "type": 3, "nextL": "a.next", - "pageE": ".videos>div.item:not([class*=exoclick]), .videos>.video, .list>div.item:not([class*=exoclick]), .photos>a, .fiction-body>.content>p, .fiction-body>.content>.chapters, .lists>a, .comic>div:not([class])", + "pageE": ".videos>div.item:not([class*=exoclick]):not([class=item]), .videos>.video, .list>div.item:not([class*=exoclick]):not([class=item]), .photos>a, .fiction-body>.content>p, .fiction-body>.content>.chapters, .lists>a, .comic>div:not([class])", "replaceE": ".pager,.prevNext", "scrollE": ".pager+div+.pager,.prevNext", "scrollD": 1000 } }, + "西斯新聞": { + "host": "sexynews.gamme.com.tw", + "url": "return fun.isPager()", + "blank": 3, + "pager": { + "nextL": ".navi-next", + "pageE": ".List-4", + "replaceE": ".navi-pages" + } + }, "Hentai Foundry": { "host": "www.hentai-foundry.com", "url": "return (fun.lp() != '/' && fun.isPager('p'))", @@ -6808,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/", @@ -6911,7 +7375,7 @@ } }, "爱妹子": { - "host": "xx.knit.bid", + "host": ["xx.knit.bid","www.lovecutes.com"], "url": "return fun.getCSS('li.active+li>a')", "blank": 4, "pager": { @@ -6924,6 +7388,23 @@ "bF": "return fun.src_bF(pageE)" } }, + "chottie": { + "host": "chottie.com", + "url": "if (fun.indexOF(/^\\/blog\\/archives/)){fun.insStyle('div[pagetotal]>div>div {display: block !important;} a>.v-image {width: auto !important;}');setTimeout(()=>{fun.getCSS('.v-btn-toggle>button:last-of-type').click();},1000)}" + }, + "XiuRenBox": { + "host": "www.xiurenbox.com", + "url": "return fun.isPager()", + "style": ".page-click-zone", + "pager": { + "nextL": ".next", + "pageE": ".wp-block-image>img", + "replaceE": ".simple-page-nav" + }, + "function": { + "bF": "return fun.src_bF(pageE, [0,'img[data-lazy-src]','data-lazy-src'])" + } + }, "MrCong": { "host": "mrcong.com", "pager": { @@ -6959,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()", @@ -7015,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$)/))", @@ -7132,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\\//", @@ -7304,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/", @@ -7314,7 +7838,7 @@ } }, "4khd.com": { - "host": ["4khd.com","yrsdu.xxtt.ink"], + "host": ["4khd.com","www.4khd.com","/^(.+)\\.xxtt\\.ink$/","/^(.+)\\.uuss\\.uk$/"], "url": "/^\\/content\\//", "pager": { "type": 3, @@ -7334,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())",