Greasy Fork

来自缓存

Greasy Fork is available in English.

京东自营商品展示

过滤京东商品页,仅显示自营商品,在列表筛选中会新增一项可以勾选是否仅显示自营商品

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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
// ==/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 = "<i></i>仅显示京东自营商品";
            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 = "<em>加载下一页</em><i>&gt;</i>";
                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();
})();