📖 晋江书单
📖晋江书单
分享者: guaner001125 (317)发布时间: 5天前
1、找书评论改为上拉加载下一页,并能详情评论里的回复
2、lyc改版点击用户名能够查看该用户的评论和书单
3、多行评论能够正确换行显示
{
"articleStyle": 2,
"cacheFirst": false,
"customOrder": 22,
"enableJs": true,
"enabled": true,
"enabledCookieJar": true,
"header": "{\n\t\"referer\":\"http:\/\/android.jjwxc.net\/?v=357\",\n\t\"versionCode\":\"357\",\n\t\"versiontype\":\"reading\",\n \"User-Agent\": \"Dalvik\/2.1.0\"\n}",
"injectJs": "let AppidE = document.getElementById(\"app\")\n\nif(AppidE){\n AppidE?AppidE.remove():null;\n\/\/ 获取书籍链接\n\t\tbookid = String(window.location.href).replace(\/^.*\\\/\/,'');\n\t\tbooksrc = \"http:\/\/app-cdn.jjwxc.net\/androidapi\/novelbasicinfo?novelId=\"+bookid;\n\t\t\nbooksrc = `legado:\/\/import\/addToBookshelf?src=${encodeURIComponent(booksrc)}`;\n\t\n\t\t\/\/获取书籍名称\ntitle = document.querySelector(\".big.o\")?document.querySelector(\".big.o\").innerText.replace(\/首页>\/,''):\"\";\n\n\/\/获取作者名称\nauthor = document.querySelector(\".authorname-content a\")?document.querySelector(\".authorname-content a\").innerText:\"\";\n\ncreate(title,\"addBookshelf\",14,booksrc);\ncreate(title,\"bookName\",18)\ncreate(author,\"bookAuthor\",22)\n\n function create(name,type,top,url){\n \t type = type+\"=\"+name;\n \t url = url!=undefined?url+\"#\"+type:\"\";\n \t \n let \ttypebutton;\n if(\/bookName\/.test(type)){\n \t typebutton=\"搜索书名\"\n \t}else if(\/bookAuthor\/.test(type)){\n \t\t typebutton=\"搜索作者\"\n \t}else{\n \t\t\t typebutton=\"加入书架\"\n \t}\n \n \tlet Url = location.search!=\"\"?location.search.replace(\/&*book[AN].*?=.*\/,'')+\"&\"+type:window.location.pathname+\"?\"+type;\n \turl = url!=\"\"?url:Url;\n \tconsole.log(url);\n \tA = document.createElement(\"a\");\n\t\t A.href =url.replace(\/#addBookshelf.*\/,'')\n\t\t \n\t\tA.innerHTML = `<button style=\"outline:none; position:fixed; top:${top}%; right:7%; z-index:999; border-radius:5px; color:#166188;background:#fff;padding:4px;border:1px solid #000\"><b>${typebutton}<\/b><\/button>`;\n\t\t\n \tdocument.body.appendChild(A);\n \t}\t \n }",
"jsLib": "function getBooklist(list,src){\n let html=\"\";\n let alllist = list.recommend_novelinfo ?? list;\n let json = src?JSON.parse(src):{};\n json = json?.data?.booklist_desc ?? {}\n for(let i in alllist){\n let $ = alllist[i];\n let novelid = $.novelid;\n let cover = ($.cover || (\"https:\/\/i9-static.jjwxc.net\/novelimage.php?novelid=\"+novelid)).replace(\/https?\/,'https');\n let cover2 = \"https:\/\/i9-static.jjwxc.net\/novelimage.php?novelid=\"+novelid;\n let novelname = $.novelname;\n let authorname = $.authorname;\n let novelstep_name = $.novelstep_name || $.novelstep_str || $.novelstep;\n let novelsize = $.novelsize;\n let novel_review_score = $.novel_review_score || ($.fav_count_str==undefined?\"\":$.fav_count_str+\"收藏\");\n let novelstar = $.novelstar || 0;\n let s=\"\";\n for(i=0;i<novelstar;i++){s+=\"★\"}\n novelstar=s;\n let novelintroshort = $.novelintroshort;\n let comment = $.comment || $.commentbody || \"\";\n comment = this.replaceEmoticons(comment? comment.replace(\/\\s*(.*)\\n\/g,'  $1<br>').replace(\/<br>(?!&emsp)\/gm,'<br>  ').replace(\/null\/g,''):\"\");\n let novelclass_str = $.novelclass_str || (\"第\"+$.chapterid+\"章 打分:\"+$.commentmark+\"分 订阅率:\"+($?.subscription_rate_info?.rate??\"\")+($?.subscription_rate_info?.iconapp==\"rate_novelallbuy\"?\"100%\":\"\"));\n novelclass_str = novelclass_str.replace(\/订阅率:$\/,'');\n let onclickOpen = json.reader_name?` onclick=\"openS('${json.reader_name}','${json.readerid}')\"`:\"\";\n \n html +=`\n <div class=\"book\">\n <div class=\"bookdes\">\n <div class=\"pic\" onclick=\"addShelf('${novelid}')\" href=\"javascript:;\">\n <img src=\"${cover}\" referrerpolicy=\"no-referrer\" onerror=\"if(this.src!='${cover2}')this.src='${cover2}'\">\n <\/div>\n <div class=\"details>\n <p class=\"bookname\">\n <span class=\"name\">\n <a href =\"https:\/\/m.jjwxc.net\/book2\/${novelid}\">${novelname}<\/a>\n <\/span>\n <br>\n <span class=\"author\" onclick=\"window.open('https:\/\/m.jjwxc.net#bookAuthor=${authorname}')\">\n ——${authorname}\n <\/span>\n <\/p> \n <p class=\"tag\" onclick=\"window.open('https:\/\/m.jjwxc.net#bookName=${novelname}')\">\n <br>\n ${novelsize}•${novelstep_name}•${novel_review_score} 🔎<br><br>\n ${novelintroshort}<br><br>\n ${novelclass_str}<br><br>\n ${novelstar}\n <\/p> \n <\/div> \n <\/div>\n ${comment ? `<div class=\"comment\" style=\"margin-top:1px\"${onclickOpen}>`+comment+\"<\/div>\":\"\"}\n <\/div> \n `; \n }\n let floor_reply_all = list.floor_reply_all ?? [];\n let floor_reply_html = \"\";\n floor_reply_all.forEach(x=>{\n let onclickOpen = ` onclick=\"openS('${x.nickname}','${x.readerid}')\"`\n floor_reply_html += `<span style=\"color:#3A9DBF\"${onclickOpen}>${x.nickname}:<\/span>${x.body}<br>`;\n });\n if(floor_reply_all.length)floor_reply_html = `<div class=\"comment\" style=\"background:#eee\">${floor_reply_html}<\/div>`;\n return this.replaceEmoticons(html+floor_reply_html)\n }\n\n\n\nfunction replaceEmoticons(t) {\n const n = t => `<img class=\"ef\" src=\"https:\/\/i9-static.jjwxc.net\/tmp\/emoji\/${t}.png\"\/>`,\n o = {'狗头': n('dog'),'星星眼': n('star'),'亲亲': n('kiss'),'害羞': n('shy'),'坏笑': n('bad_smile'),'爱心眼': n('love_heart'),'让我康康': n('look'),'加油': n('go'),'撒花': n('flower'),'奶茶': n('milk'),'彩虹屁': n('rainbow'),'笑哭': n('laugh'),'爆哭': n('cry'),'托腮': n('sigh'),'问号': n('question'),'闭嘴': n('shut'),'白眼': n('eyes'),'裂开': n('break'),'墨镜': n('20240809171403_66b5dddb9b4a9_201'),'吃瓜': n('20240813133503_66baf08792cb4_971'),'可怜': n('20240813133538_66baf0aa48da0_272'),'摊手': n('20240813133559_66baf0bfe94a8_123'),'化了': n('20240813133734_66baf11eca900_736'),'捂脸偷看': n('20240813133808_66baf140db042_203'),'哈哈大笑': n('20250327162728_67e50bf002312_926'),'摸头': n('20250327162816_67e50c2004946_460'),'抱抱': n('20250327162653_67e50bcdc4107_345'),'哦哦哦': n('20250327162901_67e50c4d70e05_616'),'无奈': n('20250327163425_67e50d916f9f7_934'),'捂脸笑哭': n('20250327162314_67e50af266b86_726'),'眼镜': n('20250513142108_6822e4d4908c7_855'),'好的': n('20250513142306_6822e54a95fec_363'),'求你了': n('20250513142345_6822e5719d933_198'),'求求你了': n('20250513142416_6822e59075a3b_751'),'小丑': n('20240813134155_66baf223161c9_172'),'猫头': n('20240813134245_66baf2554d0c0_482'),'三花猫头': n('20240813134304_66baf2688507d_882'),'垂耳兔头': n('20240813134345_66baf29111f22_694'),'竖耳兔头': n('20240813134441_66baf2c986c2b_931'),'熊猫头': n('20240813134502_66baf2deb9a59_203'),'害怕': n('fear'),'愤怒': n('anger'),'菜狗': n('20240813134018_66baf1c223617_332'),'狗头叼玫瑰': n('20250513142003_6822e493665f5_485'),'抱大腿': n('20260204135809_6982dff14e77e_333'),'加载ing': n('20260204140413_6982e15d2793a_774'),'抠脑壳': n('20260204140336_6982e138332f7_280'),'吐血': n('20260204140451_6982e1831a3eb_940'),'躺平': n('20260204140510_6982e1966d57c_902'),'咬手绢': n('20260204140825_6982e259def03_162'),'接': n('20260204140844_6982e26c6b04d_710'),'咦~': n('20260204140948_6982e2ace7d2d_985'),'鸽子': n('dove'),'发财': n('rich'),'好运莲莲': n('20240813132511_66baee37a0048_173'),'玫瑰': n('20240813132550_66baee5e5f847_433'),'橘糖': n('20240813132714_66baeeb282db3_126'),'紫糖': n('20240813132746_66baeed24ae82_531'),'猫爪': n('20240813132824_66baeef888f6a_514'),'药丸': n('20240813132902_66baef1e7590e_674'),'柠檬': n('20240813133018_66baef6a49f76_858'),'烟花': n('20250513142645_6822e6257d8f0_243'),'元宝': n('20250513142558_6822e5f6c2986_398'),'饭饭': n('20250513142708_6822e63c630d3_583'),'空碗': n('20250513142731_6822e653b7bac_594'),'鸡腿': n('20260204143139_6982e7cba82a6_247'),'蛋糕': n('20260204143253_6982e815d10ed_365'),'加一': n('20250513142841_6822e699f2124_862'),'减一': n('20250513142916_6822e6bc011ee_516'),'敲木鱼': n('20260204142929_6982e7493d944_145'),'耳朵': n('20240813133118_66baefa6c51c9_627'),'沙发': n('20260204143209_6982e7e9ea976_665'),'比心': n('hand_heart'),'点赞': n('like'),'鼓掌': n('clap'),'666': n('666'),'摆手': n('wave'),'合十': n('20240813132056_66baed38130c1_545'),'抱拳': n('20250327163246_67e50d2e50aa5_351'),'心碎': n('broken_heart'),'红心': n('red_heart'),'橙心': n('orange_heart'),'黄心': n('yellow_heart'),'绿心': n('green_heart'),'青心': n('cyan_heart'),'蓝心': n('blue_heart'),'紫心': n('purple_heart'),'粉心': n('pink_heart'),'裤子': n('20250513142753_6822e669080b5_216'),'橙裤': n('20251222112949_6948bb2d0c1a0_312'),'黄裤': n('20260204142815_6982e6ffb9231_878'),'绿裤': n('20260204150217_6982eef91613d_152'),'青裤': n('20260204153134_6982f5d665d98_318'),'蓝裤': n('20260204150249_6982ef1911a40_263'),'紫裤': n('20260204150315_6982ef3399d82_820')};\n return t.replace(\/\\[([^\\]]+)\\]\/g, (t, r) => o[r.trim()] || t)\n}",
"lastUpdateTime": 1773484022424,
"loadWithBaseUrl": true,
"loginCheckJs": "cache.put(\"jjsdv0201\",1);\nresult",
"preload": false,
"preloadJs": "window.java = java;",
"ruleArticles": "$.data.data[*]||$.data.list[*]||$.data.fav_find_book_list[*]&&$.data.find_book_list[*]&&$.data.fav_list[*]&&$.data.book_list[*]||$.data.recommend[*]%%$.data.find[*]\n<js>\nif(result ==\"[]\"){\n\tresult = JSON.stringify([\n\t{\"title\":\"支持源作者\",\n\t\"url\":`data:pic;base64,PGltZyBzdHlsZT0id2lkdGg6MTAwJSIgc3JjPSJhYm91dDpibGFuayIgb25lcnJvcj0idGhpcy5zcmM9YXRvYignYUhSMGNITTZMeTluYVhSbFpTNWpiMjB2WjNWaGJtVnlNREF4TVRJMUwySnZiMnR6YjNWeVkyVXZjbUYzTDIxaGMzUmxjaThsUlRVbE9VSWxRa1VsUlRjbE9Ea2xPRGN2WjNWaGJtVnlMbmRsWW5BPScpIj4KCg==,{\"type\":\"html\"}`}\n\t])\n\t\n\t}\nresult\n<\/js>\n$.[*]",
"ruleContent": "{{java.longToast(\"加载中....\")}}\n<title> {{$.data.booklist_desc.listname}}<\/title>\n<head>\n <meta name=\"referrer\" content=\"no-referrer\">\n<\/head>\n\n\n<div id=\"modalOverlay\" style=\"position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: none; justify-content: center; align-items: center;z-index: 1000;\">\n <div id=\"modalContent\" style=\"width: 300px; background-color: white; border-radius: 8px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); overflow: hidden;\">\n <!-- 标题栏 - 作者名字 -->\n <div style=\"background-color: #f5f8ff; padding: 8px 10px; border-bottom: 1px solid #e6f0ff;\">\n <div class=\"modalName\" style=\"color: #333; font-weight: bold; font-size: 16px; text-align: center;\"><\/div>\n <\/div>\n \n <div style=\"padding: 18px; display: flex; gap: 20px; justify-content: center;\">\n <button id=\"viewCommentsBtn\" style=\"padding: 12px 20px; background-color: #e6f0fa; border: none; border-radius: 4px; color: #4a89dc; font-weight: 500; cursor: pointer; font-size: 14px; transition: background-color 0.2s;\">💬查看评论<\/button>\n <button id=\"viewBooklistBtn\" style=\"padding: 12px 20px; background-color: white; border: 1px solid #e6f0fa; border-radius: 4px; color: #4a89dc; font-weight: 500;cursor: pointer; font-size: 14px; transition: background-color 0.2s;\">📚查看书单<\/button>\n <\/div>\n <\/div>\n<\/div>\n\n<div class=\"booklist_desc\" {{baseUrl.includes(\"getTopTenNovelComment\")?` style=\"display:none\"`:\"\"}}>\n <p class=\"listname\">\n <span class=\"level\">\n  {{$.data.booklist_desc.level}}级 \n <\/span>\n {{$.data.booklist_desc.listname}}\n <\/p>\n <span class=\"dateline\">\n {{$.data.booklist_desc.dateline||$.data.booklist_desc.create_time}}\n <\/span>\n <p class=\"des\">\n 荐书描述 共{{$.data.booklist_desc.booknum}}本\n <\/p>\n <div class=\"introduction\">\n <p>{{$.data.booklist_desc.introduction}}<\/p>\n <\/div>\n<\/div>\n<br>\n<br>\n\n<js>\n\ntry{\n list = JSON.parse(src).data?.novel_lists || JSON.parse(src).data?.booklist_desc?.recommend_novelinfo || JSON.parse(src).data;\n \n html = result + '<div class=\"booklists\">'+getBooklist(list,src)+'<\/div>';\n result = String(html)\n .replace(\/<div class=\"comment\">\\s*<\\\/div>|<span class=\"level\">\\s* 级 \\s*<\\\/span>\/g,'')\n .replace(\/荐书描述 共本\/,'');\n result = replaceEmoticons(result);\n result = \/subjectDetail\/.test(baseUrl)?result.replace(\/荐书描述 共\\d+本\/,'找书描述'):result;\n result += `\n<script>\nfunction openS(name,id){\n java.getThemeConfig();\n let modalOverlay = document.querySelector(\"#modalOverlay\");\n modalOverlay.style.display = \"flex\";\n document.querySelector(\".modalName\").textContent = name;\n modalOverlay.addEventListener('click', () => {\n modalOverlay.style.display = 'none';\n });\n \n document.querySelector(\"#viewCommentsBtn\").addEventListener('click', () => {\n let url = \"https:\/\/android.jjwxc.net\/app.jjwxc\/android\/reading\/comment\/getTopTenNovelComment?versionCode=477&reader_id=\"+id+\"&useridentity_check=1\";\n java.open(\"rss\",url,name+\"的评论\",\"📖晋江书单\");\n });\n \n document.querySelector(\"#viewBooklistBtn\").addEventListener('click', () => {\n let url = \"https:\/\/android.jjwxc.net\/app.jjwxc\/android\/reading\/booklist\/get?versionCode=477&reader_id=\"+id+\"&type=all\";\n java.open(\"sort\",url,name+\"的书单\",\"📖晋江书单\");\n });\n}\n \n var replyManager = {\n listid: 0,\n currentPage: 0,\n totalPages: 0,\n isLoading: false,\n isInitialized: false\n };\n \n \n function getListIdFromUrl() {\n var url = window.location.href;\n var match = url.match(\/id=(\\\\d+)\/);\n return match ? match[1] : 0;\n }\n \n \n ${getBooklist.toString().replace(\/this\\.\/g,'')}\n ${replaceEmoticons.toString()}\n\n function fetchWithHeaders(url, options) {\n var defaultHeaders = {\n \"referer\": \"https:\/\/android.jjwxc.net\/?v=357\",\n \"versionCode\": \"357\",\n \"versiontype\": \"reading\",\n \"User-Agent\": \"Dalvik\/2.1.0\"\n };\n var fetchOptions = options || {};\n fetchOptions.headers = Object.assign({}, defaultHeaders, fetchOptions.headers || {});\n if (!fetchOptions.headers.referer) {\n fetchOptions.headers.referer = defaultHeaders.referer;\n }\n return fetch(url, fetchOptions);\n }\n\n function loadReplies(page) {\n if (replyManager.isLoading) {\n return;\n }\n\n replyManager.isLoading = true;\n if (page === 1) {\n var loadingIndicator = document.getElementById('loadingIndicator');\n if (loadingIndicator) loadingIndicator.classList.remove('hidden');\n } else {\n var loadMoreBtn = document.getElementById('loadMore');\n var loadingIndicator = document.getElementById('loadingIndicator');\n if (loadMoreBtn) loadMoreBtn.classList.add('hidden');\n if (loadingIndicator) loadingIndicator.classList.remove('hidden');\n }\n\n var listid = getListIdFromUrl();\n if (!listid) {\n console.error(\"无法获取列表ID\");\n showError(\"加载失败:无法获取列表ID\");\n return;\n }\n\n var reply_url = \"https:\/\/app.jjwxc.org\/app.jjwxc\/android\/reading\/BookListFindBook\/replyList?versionCode=357&listid=\" + listid + \"&page=\" + page + \"&filter_recommend=0\";\n\n fetchWithHeaders(reply_url)\n .then(function(response) {\n if (!response.ok) {\n throw new Error('网络请求失败: ' + response.status);\n }\n return response.text();\n })\n .then(function(text) {\n try {\n var responseData = JSON.parse(text);\n \n \n var booklistsContainer = document.querySelector('.booklists');\n \n \n if (responseData.data && responseData.data.data && Array.isArray(responseData.data.data)) {\n var replies = responseData.data.data;\n var replyContainer = document.getElementById('replyContainer');\n if(page === 1){\n replyContainer.innerHTML = '<br><br>全部讨论('+responseData.data.total+')回复<br><br>';\n }\n \n if (!replyContainer && page === 1) {\n if (booklistsContainer) {\n var booklistsContainer = document.querySelector('.booklists');\n replyContainer = document.createElement('div');\n replyContainer.id = 'replyContainer';\n booklistsContainer.appendChild(replyContainer);\n \n if (responseData.data.page_count > 1) {\n var loadMoreHTML = '<div id=\"loadMore\" class=\"loading\">' +\n '<span class=\"loading-text\">点击加载更多评论<\/span>' +\n '<\/div>' +\n '<div id=\"loadingIndicator\" class=\"loading hidden\">' +\n '加载中...' +\n '<\/div>' +\n '<div id=\"noMore\" class=\"loading hidden\">' +\n '已加载所有评论' +\n '<\/div>';\n var loadMoreContainer = document.createElement('div');\n loadMoreContainer.innerHTML = loadMoreHTML;\n booklistsContainer.appendChild(loadMoreContainer);\n }\n } else {\n console.error(\"找不到书籍列表容器\");\n return;\n }\n }\n \n if (replyContainer) {\n var startFloor = (page - 1) * 20; \n for (var i = 0; i < replies.length; i++) {\n var replyItem = replies[i];\n var floor = startFloor + i + 1;\n let onclickOpen = \\` onclick=\"openS('$\\{replyItem.nickname}','$\\{replyItem.readerid}')\"\\`;\n replyContainer.innerHTML += '<div class=\"comment\">' +\n '<span style=\"color:#3A9DBF\"'+onclickOpen+'>' + floor + '楼 '+replyItem.nickname+'<\/span><br>' + \n replaceEmoticons(replyItem.body || '') + \n '<\/div>'+getBooklist(replyItem)+\"<br><br>\"\n }\n\n if (page === 1) {\n replyManager.totalPages = responseData.data.page_count;\n replyManager.listid = listid;\n replyManager.currentPage = 1;\n replyManager.isInitialized = true;\n \n var loadingIndicator = document.getElementById('loadingIndicator');\n if (loadingIndicator) loadingIndicator.classList.add('hidden');\n \n if (replyManager.totalPages > 1) {\n var loadMoreBtn = document.getElementById('loadMore');\n if (loadMoreBtn) {\n loadMoreBtn.classList.remove('hidden');\n loadMoreBtn.querySelector('.loading-text').textContent = \"点击加载更多评论 (第2\/\" + replyManager.totalPages + \"页)\";\n loadMoreBtn.onclick = function() { loadReplies(2); };\n }\n }\n } else {\n replyManager.currentPage = page;\n \n var loadingIndicator = document.getElementById('loadingIndicator');\n var loadMoreBtn = document.getElementById('loadMore');\n var noMore = document.getElementById('noMore');\n \n if (loadingIndicator) loadingIndicator.classList.add('hidden');\n \n if (replyManager.currentPage >= replyManager.totalPages) {\n if (noMore) noMore.classList.remove('hidden');\n } else {\n if (loadMoreBtn) {\n loadMoreBtn.classList.remove('hidden');\n loadMoreBtn.querySelector('.loading-text').textContent = \"点击加载更多评论 (第\" + (replyManager.currentPage + 1) + \"\/\" + replyManager.totalPages + \"页)\";\n loadMoreBtn.onclick = function() { loadReplies(replyManager.currentPage + 1); };\n }\n }\n }\n }\n } else {\n throw new Error('数据格式错误');\n }\n \n } catch (e) {\n throw new Error('解析数据失败: ' + e.message);\n }\n })\n .catch(function(error) {\n console.error('加载评论失败:', error);\n showError(\"加载失败,点击重试\", page);\n })\n .finally(function() {\n replyManager.isLoading = false;\n });\n }\n\n function showError(message, page) {\n if (page === 1) {\n var loadingIndicator = document.getElementById('loadingIndicator');\n if (loadingIndicator) {\n loadingIndicator.innerHTML = '<span class=\"loading-error\">' + message + '<\/span>';\n loadingIndicator.onclick = function() {\n loadingIndicator.innerHTML = '加载中...';\n loadingIndicator.onclick = null;\n loadReplies(page);\n };\n }\n } else {\n var loadMoreBtn = document.getElementById('loadMore');\n if (loadMoreBtn) {\n loadMoreBtn.innerHTML = '<span class=\"loading-error\">' + message + '<\/span>';\n loadMoreBtn.classList.remove('hidden');\n loadMoreBtn.onclick = function() {\n loadMoreBtn.innerHTML = '<span class=\"loading-text\">点击加载更多评论<\/span>';\n loadMoreBtn.onclick = function() { loadReplies(page); };\n loadReplies(page);\n };\n }\n }\n }\n\n window.addShelf = function(bookid) {\n var booksrc = \"https:\/\/app-cdn.jjwxc.net\/androidapi\/novelbasicinfo?novelId=\" + bookid;\n booksrc = \"legado:\/\/import\/addToBookshelf?src=\" + encodeURIComponent(booksrc);\n window.open(booksrc);\n };\n\n function init() {\n if (window.location.href.includes('subjectDetail')) {\n var booklistsContainer = document.querySelector('.booklists');\n if (booklistsContainer) {\n var replyContainer = document.createElement('div');\n replyContainer.id = 'replyContainer';\n booklistsContainer.appendChild(replyContainer);\n \n var loadingIndicator = document.createElement('div');\n loadingIndicator.id = 'loadingIndicator';\n loadingIndicator.className = 'loading';\n loadingIndicator.innerHTML = '正在加载评论...';\n booklistsContainer.appendChild(loadingIndicator);\n loadReplies(1);\n var isScrolling = false;\n window.addEventListener('scroll', function() {\n if (isScrolling || replyManager.isLoading || !replyManager.isInitialized || replyManager.currentPage >= replyManager.totalPages) {\n return;\n }\n\n isScrolling = true;\n setTimeout(function() {\n var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var documentHeight = document.documentElement.scrollHeight;\n if (documentHeight - (scrollTop + windowHeight) < 200) {\n loadReplies(replyManager.currentPage + 1);\n }\n isScrolling = false;\n }, 200);\n });\n }\n }\n }\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', init);\n } else {\n init();\n }\n\n<\/script>`;\n \n}catch(e){\n java.log(e);\n}\n<\/js>\n",
"ruleDescription": "@js:\nbaseUrl = String(java.getString(\"$.url\")) || baseUrl;\nif(\/data:pic;base64\/.test(baseUrl)){\n\tresult = java.base64Decode(baseUrl.match(\/base64,(.*?),\/)[1]);\n\t}else{\n\t\tresult = \"\"\n\t\t}",
"ruleImage": "$.display_novelinfo[0].ebookurl||$.display_novelinfo[0].localImg||$.cover||$.localImg\n@js:\ntry{\n\tif(\/(?:postimg|bmp|alicdn|i9-static)\\.\/.test(result)){\n\tresult = \"https:\/\/i9-static.jjwxc.net\/novelimage.php?novelid={{$.display_novelinfo[0].novelid}}\";\n\t}else if(\/data:\/.test(baseUrl) || String(java.getString(\"$.url\"))){\n\t\t\n\t\timg = String(java.base64Decode(String(java.getString(\"$.url\")).match(\/base64,(.*?),\/)[1]));\n\t\tresult = java.base64Decode(img.match(\/atob\\('([^']+)'\/)[1])\n\t\t}else{\n\t\tresult = result\n\t\t}\n\t\theader = {\n\t\t\"headers\":{\n\t\t\t\"referer\":result.match(\/(^https?:\\\/\\\/.*?\\\/)\/)?.[1]\n\t\t\t}\n\t\t}\nresult = (result +\",\"+ JSON.stringify(header)).replace(\/wx\\d+\/,'wx2')\n}catch(e){\n\tjava.log(e)\n\t}\nresult",
"ruleLink": "<js>\ndata_type = java.getString(\"$.data_type||$.examine_status||$.display_status\");\nif(data_type==\"2\"){\n\t\"https:\/\/app-cdn.jjwxc.com\/app.jjwxc\/android\/reading\/Booklist\/getDetail?listid={{$.listid}}\"\n\t}else if(\/http\/.test(baseUrl)){\n\t\t\"https:\/\/app.jjwxc.org\/app.jjwxc\/android\/reading\/BookListFindBook\/subjectDetail?versionCode=357&listid={{$.listid}}\";\n\t\t}else{\n\t\t\t\"http:\/\/www.baidu.com\"\n\t\t\t}\n<\/js>",
"ruleNextPage": "<js>\nif(\/rec_new_offset\/.test(baseUrl)){\n\tresult = \"https:\/\/app.jjwxc.org\/app.jjwxc\/android\/reading\/BookListFindBook\/square?versionCode=357&rec_new_offset={{$.data.rec_new_offset}}&find_new_offset={{$.data.find_new_offset}}&rec_edit_offset={{$.data.rec_edit_offset}}\"\n\t}else if(\/page=\/.test(baseUrl)){\n\t\tresult = baseUrl.replace(\/page=\\d+\/,\"page=\"+(Number(baseUrl.match(\/page=(\\d+)\/)[1])+1));\n\t\t\n\t\t\t}\n\t\t\n<\/js>",
"rulePubDate": "【{{java.getString(\"$.data_type||$.examine_status||$.display_status\")==1?\"🔍找书\":\"📖荐书\"}}】•{{$.level}}级 {{$.recommend_count||$.booknum}}本 {{$.fav_count||$.favnum}}收藏 | {{$.introduction}}\n@js:result = result.replace(\/•级\/g,'')\n.replace(\/【📖荐书】 本 收藏|\\s*\\|\\s*$\/g,'');",
"ruleTitle": "$.subject||$.title||$.listname##<\/*.*?>",
"searchUrl": "https:\/\/app.jjwxc.org\/app.jjwxc\/android\/reading\/BookListSearch\/search?versionCode=357&keywords={{key}}&page=1&sort=fav_count",
"shouldOverrideUrlLoading": "if(\/[\\?#&]book[AN]\/.test(url)){\n\ttitle = url.match(\/[\\?#&]book[AN].+?=(.*)\/)[1];\n\tURLDecoder = Packages.java.net.URLDecoder;\n\tgb2312Str = URLDecoder.decode(title,\"gbk\");\n utf8Str = URLDecoder.decode(title,\"utf-8\");\n\t result = gb2312Str.length() >= utf8Str.length();\n\t title = result?decodeURI(title):gb2312Str;\n\t java.searchBook(title);\n result = true\n\t}",
"showWebLog": true,
"singleUrl": false,
"sortUrl": "\n热门书单::https:\/\/android.jjwxc.net\/app.jjwxc\/android\/reading\/BookListFindBook\/hotSubjectMore?versionCode=429\n\n书单广场::https:\/\/app.jjwxc.org\/app.jjwxc\/android\/reading\/BookListFindBook\/square?versionCode=357&rec_new_offset=0&find_new_offset=0&rec_edit_offset=0&page={{page}}\n\n搜索书单::https:\/\/app.jjwxc.org\/app.jjwxc\/android\/reading\/BookListSearch\/search?versionCode=357&keywords={{svg=String(java.base64Encode(`<svg width=\"1190\" height=\"300\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><rect width=\"100%\" height=\"100%\" fill=\"#ffffff\"\/><text x=\"200\" y=\"100\" font-family=\"Arial, sans-serif\" font-size=\"70\" fill=\"#333\" font-weight=\"bold\">输入要搜索的内容<\/text><\/svg>`));if(page==1){let a=\"\";try{a=java.getVerificationCode('data:image\/svg+xml;base64,'+svg);}catch(e){java.log(e)};if(a==\"\"){a=source.getVariable()}source.setVariable(a);a}else{source.getVariable()};}}&page=1&sort=fav_count\n\n搜索百合书单::https:\/\/android.jjwxc.com\/app.jjwxc\/android\/reading\/BookListSearch\/search?versionCode=358&page=1&sort=fav_count&must_xx=3&could_xx=5&book_num_range=0%2C252&data_type=1%2C2&keywords={{svg=String(java.base64Encode(`<svg width=\"1190\" height=\"300\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><rect width=\"100%\" height=\"100%\" fill=\"#ffffff\"\/><text x=\"200\" y=\"100\" font-family=\"Arial, sans-serif\" font-size=\"70\" fill=\"#333\" font-weight=\"bold\">输入要搜索的内容<\/text><\/svg>`));if(page==1){let a=\"\";try{a=java.getVerificationCode('data:image\/svg+xml;base64,'+svg);}catch(e){java.log(e)};if(a==\"\"){a=source.getVariable()}source.setVariable(a);a}else{source.getVariable()};}}\n\n支持源作者::data:pic;base64,PGltZyBzdHlsZT0id2lkdGg6MTAwJSIgc3JjPSJhYm91dDpibGFuayIgb25lcnJvcj0idGhpcy5zcmM9YXRvYignYUhSMGNITTZMeTluYVhSbFpTNWpiMjB2WjNWaGJtVnlNREF4TVRJMUwySnZiMnR6YjNWeVkyVXZjbUYzTDIxaGMzUmxjaThsUlRVbE9VSWxRa1VsUlRjbE9Ea2xPRGN2WjNWaGJtVnlMbmRsWW5BPScpIj4KCg==,{\"type\":\"html\"}",
"sourceComment": "\/\/点击右上角三点,设置源变量搜索书单,或者下拉搜索\n\nlyc改版支持点击用户名之后,查看该用户的评论和书单",
"sourceGroup": "阅读",
"sourceIcon": "https:\/\/m-static.jjwxc.net\/images\/wap\/logo.png",
"sourceName": " 📖\n晋江书单",
"sourceUrl": "📖晋江书单",
"style": "a:link {color:#415E44;}\na:visited{color:#8EB28B}\n.ef{\n\twidth: 24px; display: inline-block; vertical-align: middle; margin-top: -4px;\n\t}\nbody{\n\tpadding-left:10px;\n\tpadding-right:20px;\n\t}\n.listname{\n\tfont-size:12px;\n\theight:4px;\n\tfont-weight:bolder\n\t}\n.level{\n\tbackground:#9DD8ED;\n\tfont-size:12px;\n\tborder-radius:8px;\n\t}\n.dateline{\n\tcolor:#BABABB;\n\tfont-size:12px\n\t}\n.introduction{\n\tborder:2px dashed #3A9DBF;\n\tborder-radius:10px;\n\t}\n.introduction p{\n\ttext-indent: 3ch;\n\tmargin:5px;\n\tfont-size:12px;\n\tfont-weight:bold\n\t}\n.des{\n\tmargin-top:10px;\n\tmargin-bottom:0px;\n\tmargin-left:18px;\n\tfont-weight:bolder;\n\tcolor:#1D5F22\n}\n.bookdes{\n\tdisplay: flex;\n\tflex-direction:row;\n\tmargin:5px;\n\twidth:100%;\n\tposition: relative;\n\t}\n.book{\n\twidth:100%;\n\tdisplay: flex;\n\tflex-direction:column;\n\talign-items:flex-start;\n\tmargin-bottom:8px;\n\t}\n.pic {\n width: 25vw;\n margin-right: 20px;\n min-height: 128px;\n border: 1px solid #C4C4C4;\n border-radius: 5px;\n box-shadow: 1px 2px 2px black;\n overflow: hidden; \/* 关键 *\/\n position: relative;\n}\n\n.pic img {\n width: 100%;\n height: 100%; \/* 填满容器高度 *\/\n object-fit: cover; \/* 保持图片比例,覆盖整个容器 *\/\n border-radius: inherit; \/* 继承圆角 *\/\n display: block;\n}\n\n.details{\n\twidth:72vw;\n\tmargin-left:25px;\n\t}\n\n.name{\n\tfont-size:13px;\n\tcolor:#000;\n\t}\n.author{\n\tcolor:#929292;\n\tfont-size:12px;\n\tdisplay:inline-block;\n\tposition:absolute;\n\tright:5px;\n\t}\n.tag{\n\tcolor:#929292;\n\tfont-size:10px;\n\tmargin-top:-10px;\n\t}\n.comment{\n\tpadding:10px;\n\tmargin-bottom:18px;\n\tmargin-top:-3px;\n\tbackground:#E8F6E9;\n\tborder-radius:5px;\n\twidth:100%;\n font-size:13px\n\t}\n\n .loading {\n text-align: center;\n padding: 20px;\n color: #666;\n cursor: pointer;\n }\n .loading:hover {\n background-color: #f5f5f5;\n }\n .loading.hidden {\n display: none;\n }\n .loading-text {\n color: #3A9DBF;\n }\n .loading-error {\n color: #ff4444;\n }",
"type": 0
}