google_direct_link

Google direct link for avoiding laggy '/url?' link.

目前為 2016-11-27 提交的版本,檢視 最新版本

// ==UserScript==
// @name        google_direct_link
// @namespace   http://catherine.v0cyc1pp.com/google_direct_link.user.js
// @include     https://www.google.co.jp/search*
// @run-at      document-end
// @author      greg10
// @license     GPL 3.0
// @version     1.2
// @require     http://code.jquery.com/jquery-3.1.1.min.js
// @grant       none
// @description Google direct link for avoiding laggy '/url?' link.
// ==/UserScript==

// [desctiption details]
// This script will replace link google search results.
//
//https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjzmeD83cnQAhVBPpQKHQtkC6wQFggbMAA&url=http%3A%2F%2Fwww.nyc.gov%2F&usg=AFQjCNGtbMsqtosAyddPnaeiyyG142mO3A&bvm=bv.139782543,d.dGo
// to
//http://www.nyc.gov/
//
// for avoiding laggy '/url?' link.

this.$ = this.jQuery = jQuery.noConflict(true);
//console.log("google_direct_link start");

function replacelink(target) {
	var str = $(target).attr("href");
	//console.log("str="+str);
	if ( str === null || str === undefined ) {
		return;
	}
	var result = str.match( /&url=([^&]+)&/ );
	if ( result !== null && result !== undefined ) {
		var direct = result[1];
		if ( direct !== null && direct !== undefined ) {
			var decoded = decodeURI( direct );
			var decoded_str2 = decoded.replace( /%3A/g , ":" ) ;
			var decoded_str3 = decoded_str2.replace( /%2F/g , "/" ) ;
			var decoded_str4 = decoded_str3.replace( /%3F/g , "?" ) ;
			var decoded_str5 = decoded_str4.replace( /%3D/g , "=" ) ;
			var decoded_str6 = decoded_str5.replace( /%23/g , "#" ) ;
			$(target).attr("href", decoded_str6);
		}
	}
}

function main() {
	$("h3 > a").each( function() {
		replacelink(this);
	});
	$("div > a").each( function() {
		replacelink(this);
	});
}


var observer = new MutationObserver(function(mutations) {
    observer.disconnect();
    main();
    observer.observe( document, config);
});

var config = { attributes: true, childList: true, characterData: true, subtree:true };

observer.observe( document, config);