[{"bookSourceUrl":"https:\/\/www.kelexs.com\/","bookSourceName":"可乐小说","enabledExplore":true,"enabled":true,"bookSourceGroup":"","author":"","help":false,"html":"<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <title>可乐小说<\/title>\r\n<\/head>\r\n<body>\r\n<\/body>\r\n<script src=\"https:\/\/vc.jd.com\/web\/js\/jquery-3.1.1.min.js\"><\/script>\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/crypto-js\/4.2.0\/crypto-js.min.js\"><\/script>\r\n<script>\r\n    var isCookieJar=true;\r\n    class FlutterJSBridge {\r\n        constructor() {\r\n            this.init();\r\n        }\r\n        init() {\r\n            if (window.flutter_inappwebview) {\r\n                this.isReady = true;\r\n                this.CookieJar();\r\n            } else {\r\n                window.addEventListener('flutterInAppWebViewPlatformReady', () => {\r\n                    this.isReady = true;\r\n                    console.log('JSBridge初始化完成');\r\n                    this.CookieJar();\r\n                });\r\n            }\r\n        }\r\n        async CookieJar() {\r\n            try {\r\n                await window.flutter_inappwebview.callHandler('CookieJar', isCookieJar);\r\n            } catch (error) {\r\n                console.error('汇报完成准备失败:', error);\r\n            }\r\n        }\r\n        async getbuildNumber() {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('buildNumber');\r\n            } catch (error) {\r\n                return  0;\r\n            }\r\n        }\r\n        async getversion() {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('version');\r\n            } catch (error) {\r\n                return  \"0.0.0\";\r\n            }\r\n        }\r\n        async toTraditional(str) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('toTraditional',str);\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async toSimplified(str) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('toSimplified',str);\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async getDeviceid() {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('id');\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async getDevice() {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('device');\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async log(str) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('log',str);\r\n            } catch (error) {\r\n                return  false;\r\n            }\r\n        }\r\n        async text(type,str) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('text',type,str);\r\n            } catch (error) {\r\n                return  false;\r\n            }\r\n        }\r\n        async showToast(str) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('showToast',str);\r\n            } catch (error) {\r\n                return  false;\r\n            }\r\n        }\r\n        async getWebViewUA() {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('getWebViewUA');\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async openurl(url) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('openurl',url,\"\");\r\n            } catch (error) {\r\n                return  false;\r\n            }\r\n        }\r\n        async openurlwithMimeType(url,mimeType) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('openurl',url,mimeType);\r\n            } catch (error) {\r\n                return  false;\r\n            }\r\n        }\r\n        async webview(url,js,html,body,header) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('webview',url,js,html,body,header,\"\",\"\");\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async webViewGetOverrideUrl(url,js,html,body,header,overrideUrlRegex) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('webview',url,js,html,body,header,overrideUrlRegex,\"\");\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async webViewGetSource(url,js,html,body,header,urlregex) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('webview',url,js,html,body,header,\"\",urlregex);\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async startBrowser(url,title,header) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('startBrowser',url,title,header);\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async startBrowserWithShouldOverrideUrlLoading(url,title,header) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('startBrowserWithShouldOverrideUrlLoading',url,title,header);\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async startBrowserDp(url,title) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('startBrowserDp',url,title);\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async back() {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('back');\r\n            } catch (error) {\r\n                return  false;\r\n            }\r\n        }\r\n        async utf8ToGbkUrlEncoded(str) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('utf8ToGbkUrlEncoded',str);\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async getVerificationCode(str,header) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('getVerificationCode',str,header);\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async addbook(bookUrl) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('addbook',bookUrl);\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async base64encode(str) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('base64encode',str);\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n        async base64decode(str) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('base64decode',str);\r\n            } catch (error) {\r\n                return  \"\";\r\n            }\r\n        }\r\n    }\r\n    class Http {\r\n        constructor() {}\r\n        async Get(url, headers, followRedirects) {\r\n            try { return await window.flutter_inappwebview.callHandler('http', 'get', url, '', headers, followRedirects, ''); } catch (error) { return null; }\r\n        }\r\n        async Post(url, headers, body, contentType, followRedirects) {\r\n            try { return await window.flutter_inappwebview.callHandler('http', 'post', url, body, headers, followRedirects, contentType); } catch (error) { return null; }\r\n        }\r\n    }\r\n    class Cache {\r\n        constructor() {}\r\n        async get(key) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('cache.get',key);\r\n            } catch (error) {\r\n                return  null;\r\n            }\r\n        }\r\n        async set(key,value) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('cache.set',key,value);\r\n            } catch (error) {\r\n                return  null;\r\n            }\r\n        }\r\n        async remove(key) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('cache.remove',key);\r\n            } catch (error) {\r\n                return  null;\r\n            }\r\n        }\r\n        async getLoginInfo(){\r\n            return await  this.get(\"LoginInfo\")\r\n        }\r\n        async putLoginInfo(info){\r\n            return await  this.set(\"LoginInfo\",info)\r\n        }\r\n        async getbookVariable(bookurl){\r\n            return await  this.get(bookurl)\r\n        }\r\n        async setbookVariable(bookurl,value){\r\n            return await  this.set(bookurl,value)\r\n        }\r\n    }\r\n    class Cookie {\r\n        constructor() {}\r\n        async get(url) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('cookie.get',url);\r\n            } catch (error) {\r\n                return  null;\r\n            }\r\n        }\r\n        async remove(url) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('cookie.remove',url);\r\n            } catch (error) {\r\n                return  null;\r\n            }\r\n        }\r\n        async set(url,value) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('cookie.set',url,value);\r\n            } catch (error) {\r\n                return  null;\r\n            }\r\n        }\r\n        async setCookie(url,key,value) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('cookie.setcookie',url,key,value);\r\n            } catch (error) {\r\n                return  null;\r\n            }\r\n        }\r\n        async getCookie(url,value) {\r\n            try {\r\n                return await window.flutter_inappwebview.callHandler('cookie.getCookie',url,value);\r\n            } catch (error) {\r\n                return  null;\r\n            }\r\n        }\r\n    }\r\n    function parseHTMLSafely(htmlStr) {\r\n        try {\r\n            var tempDiv = document.createElement('div');\r\n            tempDiv.innerHTML = htmlStr;\r\n            return $(tempDiv);\r\n        } catch (e) {\r\n            flutterBridge.log(\"HTML解析错误:\"+e.message);\r\n            return $('<div>');\r\n        }\r\n    }\r\n    function removeHTMLSafely(tempContainer) {\r\n        try {\r\n            if (tempContainer[0]) { tempContainer = tempContainer[0]; }\r\n            tempContainer.innerHTML = '';\r\n            if (tempContainer.parentNode) {\r\n                tempContainer.parentNode.removeChild(tempContainer);\r\n            }\r\n        } catch (e) {\r\n            flutterBridge.log(\"HTML移除失败:\"+e.message);\r\n        }\r\n    }\r\n    function removeHTMLTags(htmlString) {\r\n        var result = htmlString.replace(\/<script\\b[^<]*(?:(?!<\\\/script>)<[^<]*)*<\\\/script>\/gi, '');\r\n        result = result.replace(\/<style\\b[^<]*(?:(?!<\\\/style>)<[^<]*)*<\\\/style>\/gi, '');\r\n        result = result.replace(\/<link\\b[^<]*(?:(?!<\\\/link>)<[^<]*)*<\\\/link>\/gi, '');\r\n        return result;\r\n    }\r\n<\/script>\r\n<script>\r\n    const flutterBridge = new FlutterJSBridge();\r\n    const cache = new Cache();\r\n    const http = new Http();\r\n    const cookie = new Cookie();\r\n    var baseurl = \"https:\/\/www.kelexs.com\";\r\n    var searchBase = \"https:\/\/www.rrssk.com\";\r\n    var header = {\r\n        \"User-Agent\": \"Mozilla\/5.0 (Linux; Android 9; SM-G9600) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/95.0.4638.74 Mobile Safari\/537.36\",\r\n        \"Referer\": baseurl\r\n    };\r\n    function getDateCookie() {\r\n        var d = new Date();\r\n        var y = String(d.getFullYear()).slice(2);\r\n        var m = d.getMonth() + 1;\r\n        var day = d.getDate();\r\n        if (m < 10) { m = \"0\" + m; }\r\n        if (day < 10) { day = \"0\" + day; }\r\n        return \"k=\" + y + m + day;\r\n    }\r\n    function getSearchHeaders() {\r\n        var h = JSON.parse(JSON.stringify(header));\r\n        h[\"Cookie\"] = getDateCookie();\r\n        h[\"Referer\"] = \"https:\/\/www.rrssk.com\/\";\r\n        return JSON.stringify(h);\r\n    }\r\n    function getHeaders() {\r\n        return JSON.stringify(header);\r\n    }\r\n    function aesEncrypt(plaintext) {\r\n        var keyStr = 'lzxHpH8PLGXcrCIQ';\r\n        var iv = CryptoJS.enc.Utf8.parse(keyStr);\r\n        var key = CryptoJS.enc.Utf8.parse(keyStr);\r\n        var keyWords = key.words.slice();\r\n        while (keyWords.length < 8) { keyWords.push(0); }\r\n        key = CryptoJS.lib.WordArray.create(keyWords, 32);\r\n        var encrypted = CryptoJS.AES.encrypt(plaintext, key, {\r\n            iv: iv,\r\n            mode: CryptoJS.mode.CBC,\r\n            padding: CryptoJS.pad.Pkcs7\r\n        });\r\n        return encrypted.toString();\r\n    }\r\n    function extractBookId(html) {\r\n        var m = html.match(\/upclick\\('([^']+)'\\)\/);\r\n        return m ? m[1] : '';\r\n    }\r\n    function extractId(url) {\r\n        var m = url.match(\/book\\\/([^\\.\\\/]+)\/);\r\n        return m ? m[1] : '';\r\n    }\r\n    async function search(key, page) {\r\n        try {\r\n            var encrypted = '';\r\n            try { encrypted = aesEncrypt(key); } catch(e) {}\r\n            if (!encrypted) { encrypted = 'o14V2PbyUaQmq0BDTbjTdw=='; }\r\n            encrypted = encodeURIComponent(encrypted);\r\n            var searchUrl = searchBase + \"\/k-\" + encrypted + \".html\";\r\n            var post = await http.Get(searchUrl, getSearchHeaders(), true);\r\n            if (!post || !post.data) { return \"[]\"; }\r\n            var html = post.data;\r\n            flutterBridge.text(0, html);\r\n            var $container = parseHTMLSafely(removeHTMLTags(html));\r\n            var books = [];\r\n            $container.find(\".list.dList ul li\").each(function() {\r\n                var $item = $(this);\r\n                var $pic = $item.find(\".pic\");\r\n                var picHtml = $pic.html() || '';\r\n                var bookId = extractBookId(picHtml);\r\n                var bookUrl = '';\r\n                if (bookId) {\r\n                    bookUrl = baseurl + '\/book\/' + bookId + '.html';\r\n                } else {\r\n                    bookUrl = $pic.find(\"a\").attr(\"href\") || '';\r\n                    if (bookUrl && !bookUrl.startsWith('http')) {\r\n                        bookUrl = baseurl + bookUrl;\r\n                    }\r\n                }\r\n                if (!bookUrl) return;\r\n                var name = $item.find(\".name.font18 a\").text().trim();\r\n                if (!name) return;\r\n                var coverUrl = $item.find(\".pic img\").attr(\"src\") || '';\r\n                var $infoDls = $item.find(\".info dl\");\r\n                var author = '';\r\n                var kind = '';\r\n                var latestChapterTitle = '';\r\n                $infoDls.each(function() {\r\n                    var $dl = $(this);\r\n                    var dtText = $dl.find(\"dt\").text().trim();\r\n                    var ddText = $dl.find(\"dd\").text().trim();\r\n                    if (dtText.indexOf('作者') >= 0) {\r\n                        author = $dl.find(\"dd a\").text().trim() || ddText;\r\n                    } else if (dtText.indexOf('分类') >= 0) {\r\n                        kind = $dl.find(\"dd a\").text().trim() || ddText;\r\n                    } else if (dtText.indexOf('更新') >= 0 || dtText.indexOf('最新') >= 0) {\r\n                        latestChapterTitle = $dl.find(\"dd a\").text().trim() || ddText;\r\n                    }\r\n                });\r\n                var intro = $item.find(\".intro\").text().trim();\r\n                var book = {\r\n                    bookUrl: bookUrl,\r\n                    name: name,\r\n                    author: author,\r\n                    coverUrl: coverUrl,\r\n                    kind: kind,\r\n                    latestChapterTitle: latestChapterTitle,\r\n                    intro: intro,\r\n                    tocUrl: bookUrl,\r\n                    type: 0\r\n                };\r\n                books.push(book);\r\n            });\r\n            removeHTMLSafely($container);\r\n            return JSON.stringify(books);\r\n        } catch (e) {\r\n            flutterBridge.log(\"搜索错误:\" + e.message);\r\n            return \"[]\";\r\n        }\r\n    }\r\n    async function info(bookurl) {\r\n        try {\r\n            var post = await http.Get(bookurl, getHeaders(), true);\r\n            if (!post || !post.data) {\r\n                return JSON.stringify({ bookUrl: bookurl });\r\n            }\r\n            var html = post.data;\r\n            flutterBridge.text(1, html);\r\n            var $container = parseHTMLSafely(removeHTMLTags(html));\r\n            var name = $container.find('meta[property=\"og:novel:book_name\"]').attr('content') || '';\r\n            var author = $container.find('meta[property=\"og:novel:author\"]').attr('content') || '';\r\n            var coverUrl = $container.find('meta[property=\"og:image\"]').attr('content') || '';\r\n            var intro = $container.find('meta[property=\"og:description\"]').attr('content') || '';\r\n            var kind = $container.find('meta[property=\"og:novel:category\"]').attr('content') || '';\r\n            var status = $container.find('meta[property=\"og:novel:status\"]').attr('content') || '';\r\n            var lastChapter = $container.find('meta[property=\"og:novel:latest_chapter_name\"]').attr('content') || '';\r\n            var updateTime = $container.find('meta[property=\"og:novel:update_time\"]').attr('content') || '';\r\n            var bookId = extractId(bookurl);\r\n            var tocUrl = bookId ? baseurl + '\/chapter\/' + bookId + '.html' : bookurl;\r\n            if (kind && updateTime) {\r\n                kind = kind + ' | ' + updateTime;\r\n            }\r\n            var book = {\r\n                bookUrl: bookurl,\r\n                name: name,\r\n                author: author,\r\n                coverUrl: coverUrl,\r\n                intro: intro,\r\n                kind: kind,\r\n                status: status,\r\n                wordCount: lastChapter,\r\n                tocUrl: tocUrl,\r\n                type: 0\r\n            };\r\n            removeHTMLSafely($container);\r\n            return JSON.stringify(book);\r\n        } catch (e) {\r\n            flutterBridge.log(\"详情错误:\" + e.message);\r\n            return JSON.stringify({ bookUrl: bookurl });\r\n        }\r\n    }\r\n    async function chapter(tocUrl) {\r\n        try {\r\n            var post = await http.Get(tocUrl, getHeaders(), true);\r\n            if (!post || !post.data) { return \"[]\"; }\r\n            var html = post.data;\r\n            flutterBridge.text(2, html);\r\n            var $container = parseHTMLSafely(removeHTMLTags(html));\r\n            var chapters = [];\r\n            $container.find(\".chapListBody ul a\").each(function() {\r\n                var name = $(this).text().trim();\r\n                var href = $(this).attr(\"href\") || '';\r\n                if (!name || name.length < 1) return;\r\n                if (name.indexOf('点击阅读') >= 0) return;\r\n                if (!href.startsWith('http')) { href = baseurl + href; }\r\n                chapters.push({\r\n                    name: name,\r\n                    chapterId: href,\r\n                    index: chapters.length,\r\n                    isPay: false, isVip: false, isVolume: false, tag: \"\"\r\n                });\r\n            });\r\n            var pageCount = $container.find(\"[data-p]\").length;\r\n            if (pageCount > 1) {\r\n                var aid = $container.find(\".dropDown\").attr(\"data-aid\") || '';\r\n                if (!aid) {\r\n                    var idMatch = tocUrl.match(\/chapter\\\/([^\\.\\\/]+)\/);\r\n                    aid = idMatch ? idMatch[1] : '';\r\n                }\r\n                if (aid) {\r\n                    var aesKey = '', aesIv = '';\r\n                    var jsMatch = html.match(\/<script[^>]+src=[\"']([^\"']*\\\/templates\\\/js\\\/[a-zA-Z0-9]{25,}\\.js)[\"'][^>]*><\\\/script>\/i);\r\n                    if (jsMatch) {\r\n                        var jsUrl = jsMatch[1];\r\n                        if (!jsUrl.startsWith('http')) jsUrl = baseurl + jsUrl;\r\n                        var jsResp = await http.Get(jsUrl, getHeaders(), true);\r\n                        if (jsResp && jsResp.data) {\r\n                            var jsContent = jsResp.data;\r\n                            var keyM = jsContent.match(\/new\\s+AESCrypt\\s*\\(\\s*'([^']+)'\\s*\\)\/);\r\n                            if (keyM) aesKey = keyM[1];\r\n                            var ivM = jsContent.match(\/this\\.iv\\s*=\\s*CryptoJS\\.enc\\.Utf8\\.parse\\s*\\(\\s*'([^']+)'\\s*\\)\/);\r\n                            if (ivM) aesIv = ivM[1];\r\n                        }\r\n                    }\r\n                    if (!aesKey) aesKey = 'LjR0uHn5Itr0mrtL4PjZZabGnOFWNNUn';\r\n                    if (!aesIv) aesIv = '3932334301612710';\r\n                    var cKey = CryptoJS.enc.Utf8.parse(aesKey);\r\n                    var cIv = CryptoJS.enc.Utf8.parse(aesIv);\r\n                    var ajaxHeaders = JSON.parse(JSON.stringify(header));\r\n                    ajaxHeaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n                    ajaxHeaders[\"Referer\"] = tocUrl;\r\n                    var ajaxHeadersStr = JSON.stringify(ajaxHeaders);\r\n                    var postUrl = baseurl + \"\/index.php?action=loadChapterPage\";\r\n                    function doPage(p) {\r\n                        var encrypted = CryptoJS.AES.encrypt(JSON.stringify({ id: aid, page: p }), cKey, {\r\n                            iv: cIv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7\r\n                        }).toString();\r\n                        return http.Post(postUrl, ajaxHeadersStr, \"data=\" + encodeURIComponent(encrypted), \"application\/x-www-form-urlencoded\", true);\r\n                    }\r\n                    var pages = [];\r\n                    for (var p = 2; p <= pageCount; p++) pages.push(p);\r\n                    for (var i = 0; i < pages.length; i += 4) {\r\n                        var batch = pages.slice(i, i + 4);\r\n                        var results = await Promise.all(batch.map(function(p) { return doPage(p); }));\r\n                        for (var j = 0; j < results.length; j++) {\r\n                            var ajaxPost = results[j];\r\n                            if (ajaxPost && ajaxPost.data) {\r\n                                try {\r\n                                    var resp = JSON.parse(ajaxPost.data);\r\n                                    if (resp.code === 0 && resp.data) {\r\n                                        for (var k = 0; k < resp.data.length; k++) {\r\n                                            var item = resp.data[k];\r\n                                            chapters.push({\r\n                                                name: item.chaptername,\r\n                                                chapterId: baseurl + item.chapterurl,\r\n                                                index: chapters.length,\r\n                                                isPay: false, isVip: false, isVolume: false, tag: \"\"\r\n                                            });\r\n                                        }\r\n                                    }\r\n                                } catch (e2) { flutterBridge.log(\"解析章节AJAX错误:\" + e2.message); }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            removeHTMLSafely($container);\r\n            return JSON.stringify(chapters);\r\n        } catch (e) {\r\n            flutterBridge.log(\"章节错误:\" + e.message);\r\n            return \"[]\";\r\n        }\r\n    }\r\n    function extractContentText($content) {\r\n        $content.find(\"#ad-container, #center_tip, script, style, iframe\").remove();\r\n        var rawText = $content.html() || '';\r\n        rawText = rawText.replace(\/<br\\s*\\\/?>\/gi, '\\n');\r\n        rawText = rawText.replace(\/&nbsp;\/g, ' ');\r\n        rawText = rawText.replace(\/<p>\/gi, '');\r\n        rawText = rawText.replace(\/<\\\/p>\/gi, '\\n');\r\n        rawText = rawText.replace(\/<[^>]+>\/g, '');\r\n        return rawText;\r\n    }\r\n    function filterAdLines(rawText) {\r\n        var lines = rawText.split('\\n');\r\n        var filtered = [];\r\n        var adKeywords = [\"最新网址\", \"手机阅读\", \"请收藏本站\", \"本章未完\", \"点击继续\", \"温馨提示\", \"txt下载\", \"电子书下载\", \"可乐小说\", \"www.kelexs.com\", \"首发域名\", \"提供最舒适的阅读体验\", \"章节错误\", \"点此举报\", \"读取当前章节内容失败\"];\r\n        for (var i = 0; i < lines.length; i++) {\r\n            var line = lines[i].trim();\r\n            if (!line) continue;\r\n            var isAd = false;\r\n            for (var j = 0; j < adKeywords.length; j++) {\r\n                if (line.indexOf(adKeywords[j]) >= 0) { isAd = true; break; }\r\n            }\r\n            if (!isAd) filtered.push(line);\r\n        }\r\n        return filtered.join('\\n');\r\n    }\r\n    async function content(url) {\r\n        try {\r\n            var allText = '';\r\n            var curUrl = url;\r\n            for (var p = 0; p < 20; p++) {\r\n                var post = await http.Get(curUrl, getHeaders(), true);\r\n                if (!post || !post.data) break;\r\n                var html = post.data;\r\n                flutterBridge.text(3, html);\r\n                var $container = parseHTMLSafely(removeHTMLTags(html));\r\n                var rawText = extractContentText($container.find(\".content\"));\r\n                if (p === 0) { allText = rawText; } else { allText += '\\n' + rawText; }\r\n                var nextHref = '';\r\n                var idx = html.indexOf('class=\"btnBlack\"');\r\n                while (idx >= 0) {\r\n                    var start = html.lastIndexOf('<a', idx);\r\n                    if (start >= 0) {\r\n                        var end = html.indexOf('<\/a>', idx);\r\n                        if (end > start) {\r\n                            var seg = html.substring(start, end + 4);\r\n                            if (seg.indexOf('下一页') > 0) {\r\n                                var hm = seg.match(\/href=\"([^\"]+)\"\/);\r\n                                if (hm && hm[1] !== '#') { nextHref = hm[1]; break; }\r\n                            }\r\n                        }\r\n                    }\r\n                    idx = html.indexOf('class=\"btnBlack\"', idx + 1);\r\n                }\r\n                removeHTMLSafely($container);\r\n                if (!nextHref || nextHref === '#' || nextHref.indexOf('javascript') >= 0) break;\r\n                if (!nextHref.startsWith('http')) { nextHref = baseurl + nextHref; }\r\n                curUrl = nextHref;\r\n            }\r\n            var result = filterAdLines(allText);\r\n            if (result.length < 50) return \"\";\r\n            return result;\r\n        } catch (e) {\r\n            flutterBridge.log(\"正文错误:\" + e.message);\r\n            return \"\";\r\n        }\r\n    }\r\n    async function getfinds() {\r\n        var result = [];\r\n        var push = (title, url, type) => result.push({ title: title, url: url, type: type || 0 });\r\n        push(\"全部\", baseurl + \"\/list-0-{{page}}\/\", 0);\r\n        push(\"男生·玄幻\", baseurl + \"\/list-4-{{page}}\/\", 0);\r\n        push(\"男生·奇幻\", baseurl + \"\/list-5-{{page}}\/\", 0);\r\n        push(\"男生·武侠\", baseurl + \"\/list-6-{{page}}\/\", 0);\r\n        push(\"男生·仙侠\", baseurl + \"\/list-7-{{page}}\/\", 0);\r\n        push(\"男生·都市\", baseurl + \"\/list-8-{{page}}\/\", 0);\r\n        push(\"男生·军事\", baseurl + \"\/list-9-{{page}}\/\", 0);\r\n        push(\"男生·历史\", baseurl + \"\/list-10-{{page}}\/\", 0);\r\n        push(\"男生·游戏\", baseurl + \"\/list-11-{{page}}\/\", 0);\r\n        push(\"男生·体育\", baseurl + \"\/list-12-{{page}}\/\", 0);\r\n        push(\"男生·科幻\", baseurl + \"\/list-13-{{page}}\/\", 0);\r\n        push(\"男生·诸天无限\", baseurl + \"\/list-14-{{page}}\/\", 0);\r\n        push(\"男生·悬疑\", baseurl + \"\/list-15-{{page}}\/\", 0);\r\n        push(\"女生·古代言情\", baseurl + \"\/list-16-{{page}}\/\", 0);\r\n        push(\"女生·现代言情\", baseurl + \"\/list-18-{{page}}\/\", 0);\r\n        push(\"女生·浪漫青春\", baseurl + \"\/list-19-{{page}}\/\", 0);\r\n        push(\"二次元\", baseurl + \"\/list-3-{{page}}\/\", 0);\r\n        return JSON.stringify(result);\r\n    }\r\n    async function find(url, page) {\r\n        try {\r\n            var u = url.replace(\"{{page}}\", page);\r\n            if (!u.startsWith('http')) { u = baseurl + u; }\r\n            var post = await http.Get(u, getHeaders(), true);\r\n            if (!post || !post.data) { return \"[]\"; }\r\n            var html = post.data;\r\n            var $container = parseHTMLSafely(removeHTMLTags(html));\r\n            var books = [];\r\n            $container.find(\".list.dList ul li\").each(function() {\r\n                var $item = $(this);\r\n                var $nameLink = $item.find(\".name.font18 a\");\r\n                var bookUrl = $nameLink.attr(\"href\") || '';\r\n                if (!bookUrl) return;\r\n                if (!bookUrl.startsWith('http')) { bookUrl = baseurl + bookUrl; }\r\n                var name = $nameLink.text().trim();\r\n                if (!name) return;\r\n                var coverUrl = $item.find(\".pic img\").attr(\"src\") || '';\r\n                if (coverUrl && !coverUrl.startsWith('http')) { coverUrl = baseurl + coverUrl; }\r\n                var $dls = $item.find(\".info dl\");\r\n                var author = '';\r\n                var kind = '';\r\n                var latestChapterTitle = '';\r\n                $dls.each(function() {\r\n                    var $dl = $(this);\r\n                    var dtText = $dl.find(\"dt\").text().trim();\r\n                    var aText = $dl.find(\"dd a\").text().trim();\r\n                    if (dtText.indexOf('作者') >= 0) {\r\n                        author = aText || $dl.find(\"dd\").text().trim();\r\n                    } else if (dtText.indexOf('分类') >= 0) {\r\n                        kind = aText || $dl.find(\"dd\").text().trim();\r\n                    } else if (dtText.indexOf('更新') >= 0) {\r\n                        latestChapterTitle = aText || $dl.find(\"dd\").text().trim();\r\n                    }\r\n                });\r\n                var intro = $item.find(\".intro\").text().trim();\r\n                var book = {\r\n                    bookUrl: bookUrl,\r\n                    name: name,\r\n                    author: author,\r\n                    coverUrl: coverUrl,\r\n                    kind: kind,\r\n                    latestChapterTitle: latestChapterTitle,\r\n                    intro: intro,\r\n                    tocUrl: bookUrl,\r\n                    type: 0\r\n                };\r\n                books.push(book);\r\n            });\r\n            removeHTMLSafely($container);\r\n            return JSON.stringify(books);\r\n        } catch (e) {\r\n            flutterBridge.log(\"发现错误:\" + e.message);\r\n            return \"[]\";\r\n        }\r\n    }\r\n    async function getloginurl(){\r\n        return baseurl;\r\n    }\r\n    async function login(){\r\n    }\r\n    async function pay(bookurl,url){\r\n    }\r\n    async function imagedecrypt(url,image){\r\n    }\r\n    async function shouldOverrideUrlLoading(url){\r\n        return true;\r\n    }\r\n<\/script>\r\n<\/html>","login":false,"lastUpdateTime":"1783326951842"}]