// ==UserScript== // @name Tiny Customize // @description 为常用网站添加功能定制。例如:3DMGame、贴吧、淘宝、京东、GitHub... // @namespace https://greasyfork.org/zh-CN/scripts/19823-tiny-customize // @homepageURL https://greasyfork.org/zh-CN/scripts/19823-tiny-customize // @author nonoroazoro // @include /^https?:\/\/(.+\.)?github\./ // @include http://bbs.3dmgame.com/* // @include http://bbs.kafan.cn/* // @include http://forum.gamer.com.tw/* // @include http://poedb.tw/dps* // @include http://tieba.baidu.com/* // @include https://forum.gamer.com.tw/* // @include https://login.taobao.com/* // @include https://passport.jd.com/* // @include https://www.chiphell.com/* // @version 1.2.1 // @grant none // @downloadURL none // ==/UserScript== const host = window.location.host; const href = window.location.href; const pathname = window.location.pathname; /** * 获取立即执行的操作。 */ const getInstantActions = function () { const actions = []; if (host === "forum.gamer.com.tw") { // 巴哈姆特。 // 反反广告检测。 const action = function () { if (window.AntiAd) { window.AntiAd.check = function () { }; window.AntiAd.block = function () { }; window.AntiAd.verifyLink = function () { return false; }; } }; actions.push(action); } else if ( host === "bbs.kafan.cn" || host === "bbs.3dmgame.com" || host === "www.chiphell.com" ) { // 卡饭、3DMGame、Chiphell 论坛(Discuz 驱动的论坛)。 // 屏蔽方向键翻页。 const action = function () { if (window.keyPageScroll) { window.keyPageScroll = function () { }; } }; actions.push(action); } else if (/^https?\:\/\/poedb\.tw(\/?.*)\/dps/.test(href)) { // 流亡编年史。 // 屏蔽默认自动全选物品信息、自动查询物品信息。 const action = function () { const elem = document.querySelector(`#iteminfo`); elem.addEventListener("click", (e) => { e.stopPropagation(); }, true); elem.addEventListener("keydown", (e) => { if (e.key === "Enter") { document.querySelector(`form[action^="dps"]`).submit(); e.preventDefault(); } }, true); elem.addEventListener("keyup", (e) => { if (e.ctrlKey && (e.key === "v" || e.key === "V")) { document.querySelector(`form[action^="dps"]`).submit(); } }); }; actions.push(action); } else if (host === "login.taobao.com") { // 淘宝。 // 默认显示密码登录(而非 QR 码登录)界面。 let action = function () { // 始终显示密码登录。 let elems = document.querySelectorAll(`.static-form, .iconfont.static`); for (let elem of elems) { elem.setAttribute("style", "display: block !important"); } // 删除扫码登录。 elems = document.querySelectorAll(`.login-switch, .login-tip, .iconfont.quick, .quick-form`); for (let elem of elems) { elem.remove(); } }; actions.push(action); } else if (host === "passport.jd.com") { // 京东。 // 默认显示密码登录(而非 QR 码登录)界面。 let action = function () { // 删除扫码登录。 let elems = document.querySelectorAll(`.login-tab, .login-box > .mt.tab-h, .qrcode-login, #qrCoagent`); for (let elem of elems) { elem.remove(); } // 始终显示密码登录。 elems = document.querySelectorAll(`.login-box, #entry`); for (let elem of elems) { elem.setAttribute("style", "display: block !important; visibility: visible !important;"); } }; actions.push(action); } else if (/^(.+\.)?github\./.test(host)) { // GitHub。 // 禁用快捷键: "s","w"。 _disableKeydown("s w"); } return actions; }; /** * 获取延迟执行的操作。 */ const getLazyActions = function () { const actions = []; if (host === "forum.gamer.com.tw") { // 巴哈姆特。 // 自动开启图片。 let action = function () { if (window.forumShowAllMedia) { window.forumShowAllMedia(); } }; actions.push(action); } else if (host === "tieba.baidu.com") { // 贴吧。 // 删除广告贴。 action = function () { let spans; const elems = document.querySelectorAll(`#j_p_postlist > div`); for (let elem of elems) { spans = elem.querySelectorAll(`.core_reply_tail span`); for (let s of spans) { if (s.innerText.trim() === "商业推广") { elem.remove(); break; } } } }; actions.push(action); } return actions; }; /** * 立即执行指定的操作。 */ const exec = function (p_actions) { if (p_actions) { p_actions.forEach(function (p_action) { p_action(); }); } }; // 1. 立即执行。 exec(getInstantActions()); // 2. 延迟执行。 window.addEventListener("load", function () { exec(getLazyActions()); }, true); /** * 禁止键盘快捷键(单键)。 */ function _disableKeydown(p_keys) { if (typeof p_keys === "string") { const keys = p_keys.split(/\W+/); document.addEventListener("keydown", (e) => { if (keys.indexOf(e.key.toLowerCase()) !== -1) { e.stopPropagation(); } }, true); } } function _removeListeners(p_element, p_events) { if (p_element && typeof p_events === "string") { const events = p_events.split(/\W+/) || []; for (let event of events) { p_element.removeEventListener(event, _preventDefaultAction, true); p_element.addEventListener(event, _preventDefaultAction, true); } } } function _preventDefaultAction(e) { e.stopPropagation(); }