// ==UserScript== // @name AC-Baidu:绕过百度重定向直接访问网页 // @author AC // @namespace 1353464539@qq.com // @description 繞過百度搜索結果中的自己的跳轉鏈接,直接訪問原始網頁-反正都能看懂 // @version 6.3 // @create 2015-11-25 // @lastmodified 2016-4-02 // @include http://www.baidu.com/* // @include https://www.baidu.com/* // @include http://www.sogou.com/* // @include https://www.sogou.com/* // @copyright 2015+, AC // @run-at document-end // @grant GM_xmlhttpRequest // @icon https://coding.net/u/zb227/p/zbImg/git/raw/master/img0/icon.jpg // @note 2015.4.2-V6.3 尝试减少请求次数 // @note 2015.12.1-V5.0 加入搜狗的支持,但是支出不是很好 // @note 2015.11.25-V2.0 优化,已经是真实地址的不再尝试获取 // @note 2015.11.25-V1.0 完成去掉百度重定向的功能 // @downloadURL none // ==/UserScript== // 采用MutationObserver监视会大大实际代码的调用次数-比DOMNodeInserted更好的调用方式 var targets; var list; var time; var Stype; targets = document.body; // 百度 mo = new MutationObserver(function(allmutations) { // 注意querySelectorAll得到的对象是静态的,所以每次重复调用的时候需要更新 time = new Date().getTime(); if(location.href.indexOf("baidu.com") > -1){ Stype = ".t a[href='"; targets = document.getElementById("content_left"); }else if(location.href.indexOf("sogou.com") > -1){ Stype = ".rb .pt a[href='"; targets = document.getElementById("results"); } list = document.querySelectorAll(Stype.substring(0,Stype.length-7)); resetURL(); }); mo.observe(targets, {'attributes':false, 'childList': true,'characterData':true,'subtree': true}); function resetURL(){ for(var i = 0; i < list.length; i++){ // 此方法是异步,故在结束的时候使用i会出问题-严重! // 采用调用前通过context过去,调用结束后通过response.context获得 var curhref = list[i].href; if(curhref.indexOf("baidu.com") > -1 || curhref.indexOf("sogou.com") > -1) GM_xmlhttpRequest({ url: curhref, headers: { "Accept": "text/html" }, context: curhref, //直接传递i,在i=0的时候反馈回来时null-猜想被会被转换掉,所以+1 method: "GET", onload: function(response) { var indexhref = response.context; var ccnode = document.querySelectorAll(Stype+indexhref+"']")[0]; //console.log(ccnode.href); //alert(ccnode.href); if(ccnode != null){ ccnode.href = response.finalUrl; }else{ //console.log("该链接已经被其他脚本干掉了哦"+response.finalUrl); } } }); else{ //console.log("绕过百度重定向直接访问网页: 第"+i+"个已经处理了"); } } }