18AV

https://18av.luoyacheng.ip-ddns.com

分享者: lyc486 (807)发布时间: 6小时前

几年前有过的订阅源,失效后好像没人再制作了,现在由我来继续接手吧。


内置Art播放器(感谢开源项目artplayer):

1、左右滑动跳转进度;

2、左右双击快进快退,中间双击播放暂停;

3、屏幕锁;

4、自动播放和继续历史记录播放。

5、长按3倍数。等等


登录界面:

1、可控制播放器是否自动播放和记录播放历史。

2、可选择是否显示预览图。

3、可选择显示播放链接并提供一键复制。

3、左右滑动跳转进度的幅度可调。

4、双击快进的跨度可设(单位,秒)(默认为10)。

5、两个搜索分类的搜索关键词在登录界面填写。

6每日更新可填写日期来查看具体某日的发布资源。

7、支持可设为调用手机本地播放器。

8、登录界面进入进入发布页后点击✓,会自动更新源地址和发布页地址。

订阅源自动更新功能(点击版本更新会识别代码版本进行提示),但阅读自身没有订阅源版本识别,需在导入界面手动选中进行覆盖。


会对访问数据进行一定时间的缓存来极大提高使用体验。可多次下拉刷新来强制刷新内容。

注入js,对原网站进行广告净化处理。可在订阅源内跳转到原网站,当做普通浏览器使用。

[目前仅支持阅读测试版]


!!!未满18岁,请自觉绕道。严禁分享给未成年。

二维码导入
{
    "articleStyle": 1,
    "contentBlacklist": ".*pemsrv.com.*,.*adcg.*gif,.*mmfree3.com.*,.*magsrv.com.*",
    "contentWhitelist": "",
    "customOrder": -10100147,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "@js:\n(()=>{\n\tlet info=cache.getFromMemory('av18info');\nif (info) source.putLoginInfo(JSON.stringify(info)),cache.deleteMemory('av18info');\nlet headerss=gethd();\nheaderss['User-Agent']=java.getWebViewUA();\n\treturn JSON.stringify(headerss);\n})();",
    "injectJs": "function setupAutoRemoveImages() {\n    const AD_SELECTORS = [\n        'ut1_img',\n        '.ut1_img_content',\n        '.ut1_img utactivity',\n        '.ut1_img_content_js',\n        '.ut1_img_ex_content',\n        '.di_img',\n        '.di_100',\n        '[class^=\"mvspan\"]'\n    ].join(',');\n    \/\/ 使用防抖函数优化高频DOM操作\n    let cleanupTimer;\n    const debouncedRemove = () => {\n        clearTimeout(cleanupTimer);\n        cleanupTimer = setTimeout(removeAllImages, 200);\n    };\n    const removeAllImages = () => { document.querySelectorAll(AD_SELECTORS).forEach(img => img.remove()); };\n\/\/forEach方法的回调函数是表达式,不是语句,不能加分号。\n\n    const observer = new MutationObserver(mutations => {\n        \/\/ 变化有效性检查\n        const hasValidMutation = mutations.some(mutation =>\n            mutation.type === 'childList' &&\n            mutation.addedNodes.length > 0\n        );\n\n        if (hasValidMutation) {\n            debouncedRemove();\n        }\n    });\n\n    \/\/ 监听\n    const observerConfig = {\n        childList: true,\n        subtree: true\n        \/\/ 备用attributes: true\n    };\n\n    \/\/ 初始化立即执行一次清理\n    removeAllImages();\n\n    \/\/ 启动观察\n    observer.observe(document.body, observerConfig);\n\n    window.addEventListener('error', e => {\n        console.error('广告清理出错:', e.error);\n        observer.disconnect();\n    });\n}\n\n\/\/ 自动重试机制\nlet retryCount = 0;\nfunction init() {\n    try {\n        setupAutoRemoveImages();\n    } catch (e) {\n        if (retryCount++ < 3) {\n            setTimeout(init, 1000 * retryCount);\n        }\n    }\n}\n\n\/\/ 确保DOM加载后执行\nif (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n} else {\n    init();\n}",
    "jsLib": "sleep=Packages.java.lang.Thread.sleep;\nu_a = 'Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/135.0.0.0 Safari\/537.36 Edg\/135.0.0.0';\nx_r_w = ''; \/\/com.microsoft.emmx\ns_c_u_p = `\"Windows\"`;\ns_c_u = `\"Microsoft Edge\";v=\"135\", \"Not-A.Brand\";v=\"8\", \"Chromium\";v=\"135\"`;\na_l = 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7';\n\nfunction gethd(url='',ck='') {\n\tlet ck0 = this.source.getLoginHeader()||'';\n\tlet headerss = {\n\t\t  \t'User-Agent': u_a,\n\t\t  \t'Cookie': ck0,\n\t\t  \t'x-requested-with': x_r_w,\n     \t'Accept-language': a_l\n    \t }\nif (ck==1&&url!='') return url+','+JSON.stringify({'headers':headerss,'webView':true});\nif (ck!='') headerss['Cookie']=ck;\nif (url=='') return headerss;\nreturn url+','+JSON.stringify({'headers':headerss});\n}\n\nfunction gets(x, r) {\nreturn r == undefined ? String(this.java.getString(x)) : String(this.java.getString(x,r));}\n\nfunction surl() {\n\treturn (this.source.getLoginInfoMap()||{'网址':''})['网址']+[]||'https:\/\/mjv005.com';}\n\t\nfunction skey(x) {\n\treturn (this.source.getLoginInfoMap()||{'搜索1':'','搜索2':''})['搜索'+x]+[]||(x==1?'波多':'日向');}\n\nfunction tmtz() {\n\t\tlet tmt = (this.source.getLoginInfoMap()||{'双击跳转时间':''})['双击跳转时间']+[];\n\t\tif (tmt>2) return tmt;\n\t\telse return '10';\n\t}\n\nfunction tkey() {\n\tlet tkey = (this.source.getLoginInfoMap()||{'每日更新':''})['每日更新']+[];\n\tif (tkey) {\n\t\ttkey = tkey.replace(\/^\\d{0,2}(\\d{2})[\\-\\ \\\/](\\d{1,2})[-\\ \\\/](\\d{1,2})$\/, (mt, p1, p2, p3)=>{\n\t\t\tp1='20'+p1;\n\t\t\tp2=p2.padStart(2, '0');\n\t\t\tp3=p3.padStart(2, '0');\n\t\t\tp2>12&&(p2='012')\n\t\t\tp3>31&&(p3='031')\n\t\t\treturn p1+'-'+p2+'-'+p3;\n\t\t\t});\n\t\t\tif (!\/^\\d{4}-\\d{2}-\\d{2}$\/.test(tkey)) {\n\t\t\t\ttkey='';\n\t\t\t\tthis.java.toast('\\n❎请输入正确的时间格式');}\n}\nif (!tkey) {tkey = this.java.timeFormatUTC(Date.now(),\"yyyy-MM-dd\",6*60*60*1000)+[];}\n\treturn tkey;}\n\t\nfunction rrcheck(url, webr) {\n\tconst {java, source, cookie} = this;\n\tlet webr2 = org.jsoup.Jsoup.parse(webr);\n\tlet url19 = (webr2.select('#fwin_dialog_submit').attr('onclick')+'').match(\/http[^\"']+\/);\nif (url19) {\n\tlet ck=\tjava.connect(url19)\n\t.headers()\n\t.values(\"Set-Cookie\");\n\tlet cks = [];\n\tfor (let char of ck) {\n\tchar=(char+'').replace(\/;.+\/,'');\n\tcks.push(char);}\n\tck=cks.join('; ');\n\/\/\tcookie.replaceCookie(url,ck); \/\/不调用startBrowser,ck不会同步到内置浏览器\n\tck=cookie.getCookie(url); \/\/勾选ckjar就能直接读取到\n\tsource.putLoginHeader(ck);\n\tsleep(50);\n\twebr=java.ajax(url); \/\/访问前会执行一次请求头规则\n\t}\n\treturn java.t2s(webr)+'';\n}\n\n\nfunction gengxin(){\nconst {java, source} = this;\n\tlet url0='https:\/\/gitee.com\/lyc486\/yuedu2\/commits\/main\/订阅\/18AV\/18av.json?browser_history=0&page=1&per=3';\n\tlet rr0=java.get(url0,{'User-Agent': 'Mozilla\/5.0 (Linux; Android 14)','X-Requested-With': 'XMLHttpRequest'}).body();\n\tlet \tgxlrr = com.jayway.jsonpath.JsonPath.read(rr0, '$.list[0:3].title');\n\tlet [gxlr, gxlr2, gxlr3] = gxlrr;\n\tlet banben =   String(source.sortUrl).match(\/let banben=\"([\\d\\.]+)\"\/)[1];\n\tgxlr=String(gxlr).split(\/^([^\\-]+)-\/);\n\tgxlr[0]=='' ? '' : gxlr=['','0',gxlr[0]];\n\tlet gxts;\n\tif (gxlr[1]>banben){gxts=['更新','0,140,186'];}\n\telse {gxts= ['导入','76,175,80'];};\n\tlet htm = `data:text\/html;charset=utf-8,<html>\n<head>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>18AV ${gxts[0]}<\/title>\n<style>\ntable {\n\ttext-align: center;\n\tmargin: 0 auto;\n\t}\n.ann {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\theight: 50vh;\n\t}\nbutton {\n\tbackground-color: rgb(${gxts[1]});\n\tcolor: white;\n\tborder: none;\n\tborder-radius: 4px;\n\theight: 6vh;\n\twidth: 30vw;\n\toverflow: hidden;\n\t}\nbutton span {\n  cursor: pointer;\n  display: inline-block;\n  position: relative;\n  transition: 0.4s;\n}\nbutton span:after {\n  content: '>';\n  position: absolute;\n  opacity: 0;\n  top: 0;\n  right: 30px;\n  transition: 0.2s;\n}\nbutton:active span {\n  padding-right: 20px;\n}\nbutton:active span:after {\n  opacity: 1;\n  right: -40px;\n}\n<\/style>\n<\/head>\n<body>\n<table border=\"1\" cellspacing=\"0\">\n<th colspan=\"2\">最新日志:${gxlr[2]}<\/th>\n<tr>\n<td>仓库版本:${gxlr[1]}<\/td>\n<td>本地版本:${banben}<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" style=\"text-align: left;\">往期日志:${gxlr2}<br>     ${gxlr3}<\/td>\n<\/tr>\n<\/table>\n<div class=\"ann\">\n<a href=\"legado:\/\/import\/importonline?src=https:\/\/gitee.com\/lyc486\/yuedu2\/raw\/main\/订阅\/18AV\/18av.json\">\n<button><span>${gxts[0]}<\/span><\/button>\n<\/a>\n<\/div>\n<a href=\"legado:\/\/import\/importonline?src=https:\/\/cdn.jsdelivr.net\/gh\/Luoyacheng\/yuedu@main\/订阅\/18AV\/18av.json\" style=\"font-size: 10px;\">备用链接<\/a>\n<\/body>\n<\/html>`;\njava.startBrowser(htm,'订阅源更新');\r\n}\n",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "loginCheckJs": "",
    "loginUi": "[\n    {\n        name: \"网址\",\n        type: \"text\"\n    },\n    {\n        name: \"搜索1\",\n        type: \"text\"\n    },\n    {\n        name: \"搜索2\",\n        type: \"text\"\n    },\n    {\n        name: \"每日更新\",\n        type: \"text\"\n    },\n    \t{\n        name: \"📺播放器\",\n        type: \"button\",\n        action: \"bfq()\",\n        style: {\n            \"layout_flexGrow\": 0,\n            \"layout_flexBasisPercent\": -1,\n            \"layout_wrapBefore\": true\n        }\n    },\n    \t{\n        name: \"🔘继续播放\",\n        type: \"button\",\n        action: \"bfqfun('继续播放')\",\n        style: {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4,\n            \"layout_wrapBefore\": true\n        }\n    },\n    \t{\n        name: \"🔘自动播放\",\n        type: \"button\",\n        action: \"bfqfun2('自动播放')\",\n        style: {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4,\n            \"layout_wrapBefore\": flase\n        }\n    },\n    \t{\n        name: \"🔘滑动等级\",\n        type: \"button\",\n        action: \"bfqfun3('左右滑动等级',7)\",\n        style: {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4,\n            \"layout_wrapBefore\": flase\n        }\n    },\n    \t{\n        name: \"🔘显示链接\",\n        type: \"button\",\n        action: \"bfqfun('显示链接')\",\n        style: {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4,\n            \"layout_wrapBefore\": flase\n        }\n    },\n    \t{\n        name: \"🔘预览图\",\n        type: \"button\",\n        action: \"bfqfun('预览图')\",\n        style: {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4,\n            \"layout_wrapBefore\": flase\n        }\n    },\n    \t{\n        name: \"🔘外置播放器\",\n        type: \"button\",\n        action: \"bfqfun2('外置播放器')\",\n        style: {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4,\n            \"layout_wrapBefore\": flase\n        }\n    },\n    {\n        name: \"双击跳转时间\",\n        type: \"text\"\n    },\n    {\n        name: \"自定义分类\",\n        type: \"text\"\n    },\n    \t{\n        name: \"🌐发布页 \",\n        type: \"button\",\n        action: \"fabuye()\",\n        style: {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4,\n            \"layout_wrapBefore\": true\n        }\n    },\n    \t{\n        name: \"🆕版本更新\",\n        type: \"button\",\n        action: \"gengxin()\",\n        style: {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4,\n            \"layout_wrapBefore\": flase\n        }\n    }\n]",
    "loginUrl": "function login() {}\n\nfunction fabuye(){\n\tlet fbyu = source.get('fbyu')+''||'https:\/\/mm18vc.com';\n\tlet webr = java.startBrowserAwait(fbyu,'发布页',false).body();\n\tlet rr = org.jsoup.Jsoup.parse(webr);\n\tfbyu = rr.select('.list:nth-of-type(3) a').attr('href')+'';\n\tsource.put('fbyu',fbyu);\n\tlet surl = rr.select('.list:nth-of-type(6) a').attr('href')+'';\n\tjava.longToast('已记录最新网址\\n'+surl);\n\t\tlet Info=source.getLoginInfoMap()||{};\n\tInfo['网址'] = surl.replace('http:\/\/','https:\/\/');\n\tcache.putMemory('av18info',Info);\nsource.putLoginInfo(JSON.stringify(Info));\t\n}\n\nfunction bfq(){\njava.toast('正在读取播放器信息...');\njava.deleteFile('dcc1a0ac99b90ead.js');\nlet [,bb]=java.cacheFile('https:\/\/unpkg.com\/artplayer\/dist\/artplayer.js').match(\/artplayer.js.*v(.+)\/i);\njava.longToast('\\n当前使用artplayer播放器\\n版本号:V'+bb);\n\t}\n\nfunction bfqfun(x) {\nlet xx = source.get('av'+x);\n\/\/默认开启\nif(xx!=2) {source.put('av'+x,2);java.toast('⚫已关闭'+x);}\nelse {source.put('av'+x,1);java.toast('🟢已开启'+x);}\n\t}\nfunction bfqfun2(x) {\nlet xx = source.get('av'+x);\n\/\/默认关闭\nif(xx!=1) {source.put('av'+x,1);java.toast('🟢已开启'+x);}\nelse {source.put('av'+x,0);java.toast('⚫已关闭'+x);}\n\t}\nfunction bfqfun3(x,y) {\nlet xx = source.get('av'+x);\n\/\/等级调节\nxx=(xx==''||xx==1)?y+1:xx;\nif (xx>1) {\n\txx--;\n\tsource.put('av'+x,xx);\n\tjava.toast('🔵'+x+':'+xx+'级');}\n}\n",
    "ruleArticles": "<js>\nlet url=surl()+java.hexDecodeToString(result);\nlet webr=cache.get(url);\nif (!webr||webr.length()<900) {\nlet lo=java.webView('<html><\/html>','https:\/\/m.baidu.com\/','localStorage.getItem(\"artplayer_settings\")+[]')+'';\nlet slo=source.get('localS')+'';\nif (lo.length<slo.length-20) {\tlo=java.webView('<html><\/html>','https:\/\/m.baidu.com\/',`localStorage.setItem(\"artplayer_settings\", \\`${slo}\\`);\"成功\"`);\n} else {source.put('localS',lo);}\nwebr=java.ajax(url);\nwebr=rrcheck(url, webr);\ncache.put(url,webr,60*60*4);\n} else {\n\tlet mk=cache.getFromMemory(url+'2')||0;\n\tif (mk>1)\n\t\tcache.deleteMemory(url+'2'),\n\t\tcache.delete(url);\n\t\telse cache.putMemory(url+'2',mk+1);\n}\nwebr = org.jsoup.Jsoup.parse(webr);\nwebr.select('.posts>.post')\n<\/js>",
    "ruleContent": "<js>\r\nlet uu=baseUrl.replace('https:\/\/m.baidu.com\/','');\nuu=java.base64Decode(uu)+'';\nresult=uu.replace(\/[\\\/\\.\\_\\-\\s]\/g,'');\r\n  let url = surl() + uu;\n  let webr=cache.get(url);\n  if (!webr||webr.length()<900) {\r\n  webr = java.ajax(url);\r\n  webr = rrcheck(url, webr);\n  cache.put(url,webr,60*60*24*30);}\r\n  let pimg = gets('#player-wrap img@src', webr);\r\n  let yimgs = gets('.ut1_img_content_smallcg@html', webr);\r\n  let jianjie = gets('.posts-inner-details-text,.actor-right-details-images,.posts-inner-details-text@html', webr).replace('https:\/\/pics','https:\/\/cdn.cdnjson.com\/pic.html?url=https:\/\/pics');\r\n  let srcurl = source.get('av18' + result) + '';\r\n  if (!srcurl) {\r\n      java.toast('解密本片链接中');\r\n      let webjs = `\r\n  jfun_show_vfc();\r\n  $('body .main .container_small center').html()`;\r\n      webr = java.webView(webr, url, webjs);\r\n      srcurl = webr.match(\/\\\/\\\/[^\"']+js\\\/player\\\/[^\"']+php\\?id=100_([^\"'_]+)_([^\"']+)\/);\r\n      if (srcurl) {\r\n          srcurl = `\/${srcurl[1]}\/${srcurl[2]}\/${srcurl[2]}.m3u8`;\r\n          source.put('av18' + result, srcurl);\r\n      }\r\n  }\n\nif (!srcurl)\njava.longToast('💔未获取到播放链接');\nelse {\n\tsrcurl = surl().replace('\/\/', '\/\/fc.') + srcurl;\n\tlet lianjie=source.get('av显示链接')!=2?\n\t`<p>播放链接:<span>${srcurl}<\/span><button onclick=\"copyText(this,'before')\" style=\"margin-left: 2ex;\">⎘复制<\/button><\/p>`:'';\n\tlet pyer=source.get('av外置播放器')==1;\n\tif (pyer)\tjava.openUrl(srcurl,'video\/*');\n\tresult=`\r\n  <!DOCTYPE html>\r\n  <html lang=\"zh-CN\">\r\n  \r\n  <head>\r\n    <meta charset=\"UTF-8\">\r\n    <title>${rssArticle.sort}<\/title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\r\n    <style>\r\n      * {\r\n        margin: 0;\r\n        padding: 0;\r\n        box-sizing: border-box;\r\n      }\r\n  \r\n      html,\r\n      body {\r\n        width: 100%;\n        overflow-x: hidden;\n        overflow-wrap: break-word;\n        word-break: break-all;\r\n      }\r\n  \r\n      .artplayer-app {\n      \taspect-ratio: 16\/9;\r\n      }\r\n  \r\n      .ut1_img_content_smallcg {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        line-height: 0;\r\n        justify-content: space-between;\r\n      }\r\n  \r\n      .img_smallcg img {\r\n        width: 50vw;\r\n        height: auto;\r\n      }\r\n  \r\n      .posts-inner-details-text-top {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n      }\r\n  \r\n      .posts-inner-details-text-left ul {\r\n        display: flex;\r\n        width: 50vw;\r\n        flex-wrap: wrap;\r\n      }\r\n  \r\n      .posts-inner-details-text-left li {\r\n        width: 25vw;\r\n        list-style: none;\n        flex-wrap: wrap;\r\n      }\r\n  \r\n      .posts-inner-details-text-under li span {\r\n        margin-right: 1ex;\r\n      }\r\n  \r\n      h3 {\r\n        margin: 1ex;\r\n      }\r\n    <\/style>\r\n  <\/head>\r\n  \r\n  <body>\r\n    <div class=\"artplayer-${pyer?'exo':'app'}\"><\/div>\r\n    <h3>${rssArticle.title}<\/h3>\r\n    ${source.get('av预览图')!=2?yimgs:''}\r\n    ${jianjie}\n    ${lianjie}\r\n    <br>\r\n    <script>\r\n      function hexToString(hex) {\r\n        if (hex.length % 2 !== 0) hex = '0' + hex;\r\n        const bytes = new Uint8Array(hex.length \/ 2);\r\n        for (let i = 0; i < hex.length; i += 2) {\r\n          bytes[i \/ 2] = parseInt(hex.substr(i, 2), 16);\r\n        }\r\n        return new TextDecoder('utf-8').decode(bytes);\r\n      }\neval(hexToString(\"${pyer?'':java.hexEncodeToString(java.importScript('https:\/\/unpkg.com\/artplayer\/dist\/artplayer.js'))}\"))\r\n    <\/script>\r\n    <script>\n    Artplayer.PLAYBACK_RATE = [0.75, 1, 2, 4, 6];\n    Artplayer.FAST_FORWARD_TIME = 500;\n    Artplayer.MOBILE_DBCLICK_PLAY = false;\n    Artplayer.TOUCH_MOVE_RATIO = 0.${source.get('av左右滑动等级')+''||'5'};\r\n     var art = new Artplayer({\r\n        container: '.artplayer-app',\r\n        url: '${srcurl}',\n        poster: '${pimg}',\r\n        id: '${result}',\r\n        theme: '#ffad00',\r\n        autoplay: ${source.get('av自动播放')==1?true:false},\r\n        muted: ${source.get('av自动播放')==1?true:false},\r\n        fullscreen: true,\r\n        autoSize: true,\r\n        autoMini: false,\r\n        playbackRate: true,\r\n        setting: true,\r\n        lock: true,\r\n        gesture: true,\r\n        fastForward: true,\r\n        autoPlayback: ${source.get('av继续播放')!=2?true:false},\r\n        autoOrientation: true,\r\n      });\nart.on('dblclick', (event) => {\n\t const tmz = +\"${tmtz()}\";\n\t\tconst clix = event.clientX;\n\t\tconst rwid = art.rect.width;\n\t if (clix < rwid \/ 3) art.backward = tmz;\n\t else if (clix > rwid * 2 \/ 3) art.forward = tmz;\n\t else art.toggle();\n});\n\nfunction copyText(button, weizi) {\n    const text = weizi == 'before' ?\n    button.previousElementSibling.textContent :\n        weizi == 'after' ?\n            button.nextElementSibling.textContent :\n            '异常';\n    const btext = button.textContent;\n    navigator.clipboard.writeText(text)\n        .then(() => {\n            button.textContent = \"✓已复制\";\n            setTimeout(() => {\n                button.textContent = btext;\n            }, 1500);\n        })\n        .catch(err => {\n            button.textContent = \"✗失败\";\n            setTimeout(() => {\n                button.textContent = btext;\n            }, 1500);\n        });\n}\r\n    <\/script>\n  <\/body>\r\n  \r\n  <\/html>\r\n  `;}\r\n<\/js>",
    "ruleDescription": "",
    "ruleImage": "img@src",
    "ruleLink": "a.0@href\n<js>\n`https:\/\/m.baidu.com\/${java.base64Encode(result.replace(\/^http.{4}[^\\\/]+\/,''))}`\n<\/js>",
    "ruleNextPage": "page",
    "rulePubDate": ".con .meta@text",
    "ruleTitle": ".con a@text",
    "shouldOverrideUrlLoading": "!\/mjv\\d+.com|mm18\\w+.com\/.test(url)",
    "singleUrl": false,
    "sortUrl": "<js>\r\nlet banben=\"1.0.1\";\nlet fkey = (source.getLoginInfoMap()||{'自定义分类':''})['自定义分类']+[];\nfkey=fkey.split('\\n').map(x=>x.replace(\/::https.{3}[^\\\/]+\/,'::data:;base64,{{java.base64Encode(\"').replace(\/(?:\\d+|page)\\.html$\/,'\"+page+\".html\")}},{\"type\":\"18av\"}')).join('\\n');\n`\n中文字幕::data:;base64,{{java.base64Encode(\"\/zh\/chinese_list\/all\/\"+page+\".html\")}},{'type':'18av'}\n无码AV::data:;base64,{{java.base64Encode(\"\/zh\/uncensored_list\/all\/\"+page+\".html\")}},{'type':'18av'}\nH动漫::data:;base64,{{java.base64Encode(\"\/zh\/animation_list\/all\/\"+page+\".html\")}},{'type':'18av'}\n搜索1::data:;base64,{{java.base64Encode(\"\/zh\/fc_search\/all\/\"+skey(1)+\"\/\"+page+\".html\")}},{'type':'18av'}\n搜索2::data:;base64,{{java.base64Encode(\"\/zh\/fc_search\/all\/\"+skey(2)+\"\/\"+page+\".html\")}},{'type':'18av'}\n每日更新::data:;base64,{{java.base64Encode(\"\/zh\/content_news\/all\/\"+tkey()+\".html\")}},{'type':'18av'}\n随机近作::data:;base64,{{java.base64Encode(\"\/zh\/chinese_random\/all\/index.html?t=\"+page)}},{'type':'18av'}\n随机所有::data:;base64,{{java.base64Encode(\"\/zh\/chinese_randomall\/all\/index.html?t=\"+page)}},{'type':'18av'}\n${fkey}\n国产自拍::data:;base64,{{java.base64Encode(\"\/zh\/dt_list\/all\/\"+page+\".html\")}},{'type':'18av'}\n`<\/js>",
    "sourceComment": "",
    "sourceGroup": "🙈",
    "sourceIcon": "https:\/\/gitee.com\/lyc486\/yuedu\/raw\/master\/0GP0yD.gif",
    "sourceName": "18AV",
    "sourceUrl": "https:\/\/18av.luoyacheng.ip-ddns.com",
    "style": "",
    "variableComment": ""
}
广告