📖 晋江书单

📖晋江书单

分享者: 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,'&emsp;&emsp;$1<br>').replace(\/<br>(?!&emsp)\/gm,'<br>&emsp;&emsp;').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            &emsp;{{$.data.booklist_desc.level}}级&emsp;\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*&emsp;级&emsp;\\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
}
广告