// ==UserScript== // @name 京东自营商品展示 // @namespace https://github.com/gam2046/userscript // @description 过滤京东商品页,仅显示自营商品,在列表筛选中会新增一项可以勾选是否仅显示自营商品 // @author forDream // @include *://list.jd.com/list.html?* // @include *://search.jd.com/Search?* // @run-at document-idle // @supportURL https://github.com/gam2046/userscript/issues/new // @version 0.4.1 // @downloadURL https://update.greasyfork.icu/scripts/33205/%E4%BA%AC%E4%B8%9C%E8%87%AA%E8%90%A5%E5%95%86%E5%93%81%E5%B1%95%E7%A4%BA.user.js // @updateURL https://update.greasyfork.icu/scripts/33205/%E4%BA%AC%E4%B8%9C%E8%87%AA%E8%90%A5%E5%95%86%E5%93%81%E5%B1%95%E7%A4%BA.meta.js // ==/UserScript== (function () { 'use strict'; var extension = { extensionSwitch: false, selfGoodsCount: 0, originalPager: undefined, bottomPageText: undefined, selfPattern: '//item\.jd\.com/\\d{6,7}.html', isCategoryPage: function () { return window.location.host == 'list.jd.com'; }, pagerText: function () { if (extension.isCategoryPage()) return '当前已加载' + SEARCH.adv_param.page + '页'; else return "当前已加载" + SEARCH.current_page + "页 共计" + SEARCH.adv_param.page_count + "页"; }, const: { aTagName: "fd_shown_jd_self_support_link", liTagName: "fd_shown_jd_self_support" }, enableExtension: function () { extension.extensionSwitch = true; }, disableExtension: function () { extension.extensionSwitch = false; }, initialization: function () { window.setInterval(extension.funcAddSwitchbox, 2000); window.setInterval(extension.funcFilterResult, 2000); }, scrollPosition: function () { return document.documentElement.scrollTop / document.documentElement.scrollHeight; }, funcFilterResult: function () { console.log("beginning to find jd self support goods."); var items = document.getElementsByClassName("gl-item"); var count = 0; for (var n = 0; n < items.length; n++) { var item = items[n]; if (extension.extensionSwitch) { // 选中对话框 if (item.innerHTML.match(extension.selfPattern) == null) { item.hidden = true; count++; console.log("Hidden index of " + n); } } else { item.hidden = false; } } extension.selfGoodsCount = items.length - count; console.log("Total items " + items.length + " blocked " + count); }, funcFindSwitchbox: function () { var ul = document.getElementById("J_feature"); if (!ul) ul = document.getElementsByClassName("f-feature")[0]; return ul.children[0]; }, funcAddSwitchbox: function () { if (document.getElementById(extension.const.liTagName) != null) { document.getElementById(extension.const.aTagName).className = extension.extensionSwitch ? "selected" : ""; return; } var ul = extension.funcFindSwitchbox(); var li = document.createElement("li"); var a = document.createElement("a"); a.id = extension.const.aTagName; a.href = "javascript:;"; a.className = extension.extensionSwitch ? "selected" : ""; a.innerHTML = "仅显示京东自营商品"; a.onclick = extension.funcSwitchboxClick; li.id = extension.const.liTagName; li.appendChild(a); ul.appendChild(li); }, funcSwitchboxClick: function () { extension.extensionSwitch = !extension.extensionSwitch; extension.funcAddSwitchbox(); extension.funcModifyPagerJumper(); }, funcRequestGoods: function () { // 根据页面分类加载下一页 if (extension.isCategoryPage()) { extension.funcCategoryRequestGoods(); } else { var totalPage = SEARCH.adv_param.page_count; var currentPage = SEARCH.current_page; if (currentPage < totalPage) { SEARCH.scroll(); } else { alert("已经到达最后一页,无法继续翻页"); } } // 更新页脚 extension.bottomPageText.innerText = extension.pagerText(); }, funcModifyPagerJumper: function () { var pageWrap = document.getElementById("J_bottomPage"); var modifyTagId = "fd_bottomPage"; if (extension.extensionSwitch) { // if (!SEARCH || !SEARCH.scroll) return; // 部分页面没有该对象则不修改页脚 // modify pageWrap.hidden = true; var modifyBottom = document.createElement("div"); modifyBottom.id = modifyTagId; modifyBottom.className = "p-wrap"; document.getElementsByClassName("page clearfix")[0].appendChild(modifyBottom); var pagerNum = document.createElement("span"); pagerNum.className = "p-num"; modifyBottom.appendChild(pagerNum); var span = document.createElement("span"); span.innerText = extension.pagerText(); span.className = "p-skip"; extension.bottomPageText = span; var nextButton = document.createElement("a"); nextButton.innerHTML = "加载下一页>"; nextButton.className = "pn-next"; nextButton.href = "javascript:;"; nextButton.onclick = extension.funcRequestGoods; pagerNum.appendChild(span); pagerNum.appendChild(nextButton); } else { // restore pageWrap.hidden = false; var modifyBottom = document.getElementById(modifyTagId); if (modifyBottom) modifyBottom.remove(); } }, funcCategoryRequestGoods: function () { var page = parseInt(SEARCH.adv_param.page) + 1; var requestBaseUrl = 'https://list.jd.com/list.html?cat='; var requestArgs = []; requestArgs.push(SEARCH.adv_param.cid1); requestArgs.push(SEARCH.adv_param.cid2); requestArgs.push(SEARCH.adv_param.cid3); var url = requestBaseUrl + requestArgs.join() + '&page=' + page; console.log('Try to connect next page', url); $.get(url, function (data, status) { if (status != 'success') { alert('加载下一页内容失败'); return; } var div = document.createElement("div"); div.innerHTML = data; var dom = div.childNodes; var items = div.getElementsByClassName('gl-item'); console.log('items is ', items); var ul = document.getElementsByClassName('gl-warp clearfix')[0]; for (var n = 0; n < items.length; n++) { var item = items[n]; if (item.innerHTML.match(extension.selfPattern) != null) { console.log('Find a self goods'); var imgs = item.getElementsByTagName("img"); for (var k = 0; k < imgs.length; k++) { var img=imgs[k]; if (img && img.dataset.lazyImg) img.src = dataset.lazyImg; } ul.appendChild(item); } } }); // 翻页 SEARCH.adv_param.page = page; console.log('Turn to page', page); } }; extension.initialization(); })();