您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
去除百度搜索跳转链接
当前为
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ // ==UserScript== // @name remove the jump link in BAIDU (ECMA6) // @author axetroy // @description 去除百度搜索跳转链接 // @version 2016.4.11 // @grant GM_xmlhttpRequest // @grant GM_addStyle // @include *www.baidu.com* // @connect tags // @connect * // @compatible chrome 完美运行 // @compatible firefox 完美运行 // @supportURL http://www.burningall.com // @run-at document-start // @contributionURL [email protected]|alipay.com // @namespace https://greasyfork.org/zh-CN/users/3400-axetroy // @license The MIT License (MIT); http://opensource.org/licenses/MIT // ==/UserScript== /* jshint ignore:start */ 'use strict'; (function () { 'use strict'; var $ = require('./libs/jqLite'); var init = require('./src/init'); var observe = require('./src/observe'); var mouseover = require('./src/mouseover'); var scroll = require('./src/scroll'); $(function () { // init init(); // observe the document observe(); // when mouse over on a A Tag and request mouseover(); // scroll and request scroll(); }); console.info('去跳转启动...'); })(); /* jshint ignore:end */ },{"./libs/jqLite":4,"./src/init":6,"./src/mouseover":8,"./src/observe":9,"./src/scroll":10}],2:[function(require,module,exports){ /** * http service * @param ops * @returns {Promise} */ 'use strict'; var $q = require('./$q'); var $ = require('./jqLite'); var $http = function $http() { var ops = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; var deferred = $q.defer(); var onreadystatechange = function onreadystatechange(response) { if (response.readyState !== 4) return; response.requestUrl = ops.url; if (/^(2|3)/.test(response.status) || response.finalUrl) { deferred.resolve(response); } else { deferred.reject(response); } }; var ontimeout = function ontimeout(response) { response.requestUrl = ops.url; response && response.finalUrl ? deferred.resolve(response) : deferred.reject(response); }; var onerror = function onerror(response) { response.requestUrl = ops.url; response && response.finalUrl ? deferred.resolve(response) : deferred.reject(response); }; ops = $.fn.merge({ onreadystatechange: onreadystatechange, ontimeout: ontimeout, onerror: onerror }, ops); // make the protocol agree if (!new RegExp('^' + window.location.protocol).test(ops.url)) { ops.url = ops.url.replace(/^(http|https):/im, window.location.protocol); } GM_xmlhttpRequest(ops); return deferred.promise; }; ['HEAD', 'GET', 'POST'].forEach(function (method) { $http[method.toLocaleLowerCase()] = function (url) { var ops = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var deferred = $q.defer(); ops = $.fn.merge(ops, { url: url, method: method }); $http(ops).then(function (response) { deferred.resolve(response); }, function (response) { deferred.reject(response); }); return deferred.promise; }; }); module.exports = $http; },{"./$q":3,"./jqLite":4}],3:[function(require,module,exports){ 'use strict'; /** * simple deferred object like angularJS $q or q promise library * @param fn promise function * @returns {Promise} */ var $q = function $q() { var fn = arguments.length <= 0 || arguments[0] === undefined ? noop : arguments[0]; return new Promise(fn); }; /** * generator a deferred object use like angularJS's $q service * @returns {{}} */ $q.defer = function () { var deferred = {}; deferred.promise = new Promise(function (resolve, reject) { deferred.resolve = function (response) { resolve(response); }; deferred.reject = function (response) { reject(response); }; }); return deferred; }; $q.resolve = function (response) { return $q(function (resolve, reject) { resolve(response); }); }; $q.reject = function (response) { return $q(function (resolve, reject) { reject(response); }); }; module.exports = $q; },{}],4:[function(require,module,exports){ 'use strict'; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var noop = function noop(x) { return x; }; var jqLite = (function () { function jqLite() { var _this = this; var selectors = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0]; var context = arguments.length <= 1 || arguments[1] === undefined ? document : arguments[1]; _classCallCheck(this, jqLite); this.selectors = selectors; this.context = context; this.length = 0; switch (typeof selectors) { case 'undefined': break; case 'string': Array.from(context.querySelectorAll(selectors), function (ele, i) { _this[i] = ele; _this.length++; }, this); break; case 'object': if (selectors.length) { Array.from(selectors, function (ele, i) { _this[i] = ele; _this.length++; }, this); } else { this[0] = selectors; this.length = 1; } break; case 'function': this.ready(selectors); break; default: } } jqLite.prototype.each = function each() { var fn = arguments.length <= 0 || arguments[0] === undefined ? noop : arguments[0]; for (var i = 0; i < this.length; i++) { fn.call(this, this[i], i); } return this; }; jqLite.prototype.bind = function bind() { var types = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0]; var fn = arguments.length <= 1 || arguments[1] === undefined ? noop : arguments[1]; this.each(function (ele) { types.trim().split(/\s{1,}/).forEach(function (type) { ele.addEventListener(type, function (e) { var target = e.target || e.srcElement; if (fn.call(target, e) === false) { e.returnValue = true; e.cancelBubble = true; e.preventDefault && e.preventDefault(); e.stopPropagation && e.stopPropagation(); return false; } }, false); }); }); }; jqLite.prototype.ready = function ready() { var _this2 = this; var fn = arguments.length <= 0 || arguments[0] === undefined ? noop : arguments[0]; this.context.addEventListener('DOMContentLoaded', function (e) { fn.call(_this2); }, false); }; jqLite.prototype.observe = function observe() { var _this3 = this; var fn = arguments.length <= 0 || arguments[0] === undefined ? noop : arguments[0]; var config = arguments.length <= 1 || arguments[1] === undefined ? { childList: true, subtree: true } : arguments[1]; this.each(function (ele) { var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { fn.call(_this3, mutation.target, mutation.addedNodes, mutation.removedNodes); }); }); observer.observe(ele, config); }); return this; }; jqLite.prototype.attr = function attr(_attr, value) { // one agm if (arguments.length === 1) { // get attr value if (typeof _attr === 'string') { return this[0].getAttribute(_attr); } // set attr with a json else if (typeof _attr === 'object') { this.each(function (ele) { for (var at in _attr) { if (_attr.hasOwnProperty(at)) { ele.setAttribute(at, value); } } }); return value; } } // set else if (arguments.length === 2) { this.each(function (ele) { ele.setAttribute(_attr, value); }); return this; } else { return this; } }; jqLite.prototype.removeAttr = function removeAttr(attr) { if (arguments.length === 1) { this.each(function (ele) { ele.removeAttribute(attr); }); } return this; }; _createClass(jqLite, [{ key: 'text', get: function get() { var ele = this[0]; return ele.innerText ? ele.innerText : ele.textContent; } }], [{ key: 'fn', get: function get() { var visible = function visible(ele) { var pos = ele.getBoundingClientRect(); var w = undefined; var h = undefined; var inViewPort = undefined; var docEle = document.documentElement; var docBody = document.body; if (docEle.getBoundingClientRect) { w = docEle.clientWidth || docBody.clientWidth; h = docEle.clientHeight || docBody.clientHeight; inViewPort = pos.top > h || pos.bottom < 0 || pos.left > w || pos.right < 0; return inViewPort ? false : true; } }; var debounce = function debounce(fn, delay) { var timer = undefined; return function () { var _this4 = this; var agm = arguments; window.clearTimeout(timer); timer = window.setTimeout(function () { fn.apply(_this4, agm); }, delay); }; }; var merge = function merge() { for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { sources[_key] = arguments[_key]; } return Object.assign.apply(Object, [{}].concat(sources)); }; return { visible: visible, debounce: debounce, merge: merge }; } }]); return jqLite; })(); var $ = function $() { var selectors = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0]; var context = arguments.length <= 1 || arguments[1] === undefined ? document : arguments[1]; return new jqLite(selectors, context); }; $.fn = jqLite.fn; module.exports = $; },{}],5:[function(require,module,exports){ // config 'use strict'; var config = { rules: '\n a[href*="www.baidu.com/link?url"]\n :not(.m)\n :not([decoding])\n :not([decoded])\n '.trim().replace(/\n/img, '').replace(/\s{1,}([^a-zA-Z])/g, '$1'), debug: false, isDecodingAll: false }; if (config.debug) { GM_addStyle('\n a[decoded]{\n background-color:green !important;\n color:#303030 !important;\n };\n a[decoding]{\n background-color:yellow !important;\n color:#303030 !important;\n }\n '); } module.exports = config; },{}],6:[function(require,module,exports){ 'use strict'; var main = require('./main'); var $q = require('../libs/$q'); var config = require('./config'); var init = function init() { new main(config.rules).all().then(function () { return $q.resolve(true); }, function () { return $q.resolve(true); }).then(function () { new main(config.rules).oneByOne(); }); }; module.exports = init; },{"../libs/$q":3,"./config":5,"./main":7}],7:[function(require,module,exports){ /** * the main class to bootstrap this script */ 'use strict'; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var config = require('./config'); var $ = require('./../libs/jqLite'); var $q = require('./../libs/$q'); var $http = require('./../libs/$http'); var main = (function () { function main() { var _this = this; var agm = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0]; _classCallCheck(this, main); if (!agm) return this; this.inViewPort = []; $(agm).each(function (ele) { return $.fn.visible(ele) && _this.inViewPort.push(ele); }); } /** * request a url which has origin links * @returns {Promise} */ main.prototype.all = function all() { var deferred = $q.defer(); var url = window.top.location.href.replace(/(\&)(tn=\w+)(\&)/img, '$1' + 'tn=baidulocal' + '$3'); config.isDecodingAll = true; $http.get(url, { timeout: 2000 }).then(function (response) { config.isDecodingAll = false; if (!response) return; var responseText = response.responseText; // remove the image/script/css resource responseText = responseText.replace(/(src=[^>]*|link=[^>])/g, ''); var html = document.createElement('html'); html.innerHTML = responseText; $('.t>a:not(.OP_LOG_LINK):not([decoded])').each(function (sourceEle) { $('.f>a', html).each(function (targetEle) { if ($(sourceEle).text === $(targetEle).text) { sourceEle.href = targetEle.href; $(sourceEle).attr('decoded', true); } }); }); deferred.resolve(response); }, function (response) { config.isDecodingAll = false; deferred.reject(response); }); return deferred.promise; }; main.prototype.one = function one(aEle) { var deferred = $q.defer(); $(aEle).attr('decoding', true); $http.get(aEle.href, { timeout: 2000, anonymous: true }).then(function (response) { $(aEle).attr('href', response.finalUrl).attr('decoded', true).removeAttr('decoding'); deferred.resolve(response); }, function (response) { $(aEle).removeAttr('decoding'); deferred.reject(response); }); return deferred.promise; }; /** * request the A tag's href one by one those in view port * @returns {main} */ main.prototype.oneByOne = function oneByOne() { var _this2 = this; $(this.inViewPort).each(function (aEle) { if (!main.match(aEle)) return; _this2.one(aEle); }); return this; }; /** * match the Element */ main.match = function match(ele) { if (ele.tagName !== "A" || !ele.href || !/www\.baidu\.com\/link\?url=/im.test(ele.href) || !!$(ele).attr('decoded') || !!$(ele).attr('decoding')) { return false; } else { return true; } }; return main; })(); module.exports = main; },{"./../libs/$http":2,"./../libs/$q":3,"./../libs/jqLite":4,"./config":5}],8:[function(require,module,exports){ /** * Created by axetroy on 16-4-10. */ 'use strict'; var $ = require('../libs/jqLite'); var main = require('./main'); var mouseoverDebounce = $.fn.debounce(function (e) { var aEle = e.target; if (aEle.tagName !== "A" || !aEle.href || !/www\.baidu\.com\/link\?url=/im.test(aEle.href) || !!$(aEle).attr('decoded')) { return; } new main().one(aEle); }, 100); var mouseover = function mouseover() { return function () { $(document).bind('mouseover', function (e) { mouseoverDebounce(e); }); }; }; module.exports = mouseover(); },{"../libs/jqLite":4,"./main":7}],9:[function(require,module,exports){ /** * Created by axetroy on 16-4-10. */ 'use strict'; var $ = require('../libs/jqLite'); var main = require('./main'); var init = require('./init'); var config = require('./config'); var observe = function observe() { return function () { var observeDebounce = $.fn.debounce(function (target) { var addList = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1]; var removeList = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2]; if (!addList.length) return; config.isDecodingAll ? new main(config.rules).oneByOne() : init(); }, 100); $(document).observe(function (target) { var addList = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1]; var removeList = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2]; observeDebounce(target, addList, removeList); }); }; }; module.exports = observe(); },{"../libs/jqLite":4,"./config":5,"./init":6,"./main":7}],10:[function(require,module,exports){ /** * Created by axetroy on 16-4-10. */ 'use strict'; var $ = require('../libs/jqLite'); var main = require('./main'); var config = require('./config'); var scroll = function scroll() { return function () { var scrollDebounce = $.fn.debounce(function () { new main(config.rules).oneByOne(); }, 100); $(window).bind('scroll', function () { scrollDebounce(); }); }; }; module.exports = scroll(); },{"../libs/jqLite":4,"./config":5,"./main":7}]},{},[1]);