Indowebster GET Link

(Indowebster) automatically get download link

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name          Indowebster GET Link
// @namespace     http://userscripts.org/scripts/show/69049
// @include       http://*.indowebster.com/*.html
// @include       http://*.indowebster.com/download/*
// @include       http://*.indowebster.com/downloads/*
// @exclude       http://ads.indowebster.com*
// @version       13060830
// @description   (Indowebster) automatically get download link
// @author        idx (http://userscripts.org/users/idx)
//
// Indowebster Link Download
//
// Copyright (c) 2009, Idx
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
// --------------------------------------------------------------------
// Mod By: Idx
// ==============
//
// mod.R-30 : 2013-06-08
//  recode
//
// mod.R-29 : 2012-11-03
//  reindent code
//  fix autodownload
//
//
// --------------------------------------------------------------------
// ==/UserScript==
(function() {
	function main(){

	var gvar = function() {};
	gvar.vver = "R.30";
	gvar.apps_title = 'IDWS GET[Link] - '+gvar.vver;
	gvar.apps_src = '//userscripts.org/scripts/show/69049';

	gvar.__DEBUG__ = !1;
	var OPTIONS_BOX = {
	  IDWS_AUTODOWNLOAD:  ['1']
	}, KS	= 'IDWS_';

	var GMSTORAGE_PATH = "GM_";
  var $D = function(q, root, single) {
    if(root && typeof root == "string") {
      root = $D(root, null, true);
      if(!root) {
        return null
      }
    }
    if(!q) {
      return false
    }
    if(typeof q == "object") {
      return q
    }
    root = root || document;
    if(q[0] == "#") {
      return root.getElementById(q.substr(1))
    }else {
      if(q[0] == "/" || q[0] == "." && q[1] == "/") {
        if(single) {
          return document.evaluate(q, root, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue
        }
        return document.evaluate(q, root, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
      }else {
        if(q[0] == ".") {
          return root.getElementsByClassName(q.substr(1))
        }
      }
    }
    return root.getElementsByTagName(q)
  };
	var GM_addGlobalScript = function (a, b, c) {
		var d = createEl("script", { type: "text/javascript"});
		if (isDefined(b) && isString(b)) d.setAttribute("id", b);
		if (a.match(/^https?:\/\/.+/)) d.setAttribute("src", a);
		else d.appendChild(createTextEl(a));
		if (isDefined(c) && c) {
			document.body.insertBefore(d, document.body.firstChild)
		} else {
			var e = document.getElementsByTagName("head");
			if (isDefined(e[0]) && e[0].nodeName == "HEAD") gvar.$w.setTimeout(function () {
				e[0].appendChild(d)
			}, 100);
			else document.body.insertBefore(d, document.body.firstChild)
		}
		return d
	};
	var GM_addGlobalStyle = function (a, b, c) {
		var d, e;
		if (a.match(/^https?:\/\/.+/)) {
			d = createEl("link", { type: "text/css", rel:'stylesheet', href:a });
		}else{
			d = createEl("style", { type: "text/css" });
			d.appendChild(createTextEl(a));
		}
		if (isDefined(b) && isString(b)) d.setAttribute("id", b);
		if (isDefined(c) && c) {
			document.body.insertBefore(d, document.body.firstChild)
		} else {
			e = document.getElementsByTagName("head");
			if (isDefined(e[0]) && e[0].nodeName == "HEAD") gvar.$w.setTimeout(function () {
				e[0].appendChild(d)
			}, 100);
			else document.body.insertBefore(d, document.body.firstChild)
		}
		return d
	};
	var rSRC = {
		getCSS: function(){
			return ''
				+'.wrap-actions{margin-top:-20px; padding:0; border:1px solid #ccc;}'
				+'.wrap-actions .btitle, .wrap-actions .btn_toggle_autodl, .title .btn_toggle_autodl{display:inline-block;}'
				+'.wrap-actions .btitle{background:#ddd; border-bottom:1px solid #ccc; padding:8px 0 5px 0; margin-bottom:20px;display:block;}'
				+'.wrap-actions .btitle a{font-size:14px; font-weight:bold; line-height:10px; display:inline-block; margin-left:10px;}'
				+'.btn_toggle_autodl{float:right;margin:7px 14px 0 0; font-size:11px;}'
				+'.btn_toggle_autodl input{width: 13px; height:13px; padding:0; margin:0; position: relative; top:-2px; vertical-align: bottom; *overflow: hidden;}'
				+'.btn_toggle_autodl label{display: block; text-indent: -15px;}'
				+'.title .btitle{display:inline-block;}'
				+'.title .btn_toggle_autodl{margin-top:3px;}'
				+'.title .btn_toggle_autodl input{top:-3px;}'
				+'.tips{color:#999; padding:5px;}'
				+'.hide{display:none}'
				+''
			;
		},
		getSCRIPT: function(){
			return ''
				+'var gvar = gvar || {};'
				+'var $btntarget = ($ && $(".downloadBtn").length ? $(".downloadBtn").first().find("input").first() : null);'
				+'var currentTitle = $("title").first().text();'
				+''
				+'function setTitle(x){$("title").first().text(x)}'
				+'function clog(x){console && console.log(x)}'
				+'function g(x){return document.getElementById(x)}'
				+''
				+'function frameloaded(){'
				+'$btntarget && $btntarget.val("Please wait.........");'
				+'if( $btntarget.hasClass("color_red") )'
				+' $btntarget.addClass("color_blue").removeClass("color_red");'
				+'}'
				+'function sendMessage(msg, cb){'
				+'gvar.link = msg;'
				+'("function" == typeof cb) && cb();'
				+'}'
				+'function respondLink(){'
				+'$btntarget.parent().attr("href", gvar.link);'
				+'var isAudl = $("#btn_autodl").is(":checked");'
				+'isAudl && $("#directlink_iframe").attr("src", gvar.link);'
				+'setTitle("[R] "+currentTitle);'
				+'if( $.browser.webkit )'
				+' $(".wrap-actions").find(".tips").removeClass("hide");'
				+'}'
				+'function timerMessage(msg){'
				+'if( msg > 0 )'
				+' $btntarget.val("DOWNLOAD ["+msg+"]");'
				+'else '
				+' $btntarget.val("DOWNLOAD REDE").removeClass("color_blue color_red").addClass("color_green");'
				+'setTitle("["+msg+"] "+currentTitle)'
				+'}'
		},
		getSCRIPT_Framed: function(){
			return ''
				+'var currentTitle = $("title").first().text();'
				+'function setTitle(x){$("title").first().text(x)}'
				+'function storeLink(e){'
				+'var el = e.target||e,'
				+' data_link=$(el).attr("data-link"),'
				+' data_autodl = $(el).attr("data-autodl"),'
				+' data_insideframe = $(el).attr("data-insideframe");'
				+'if( data_insideframe )'
				+' parent.sendMessage(data_link, parent.respondLink);'
				+'else{'
				+' data_autodl && $("#directlink_iframe").attr("src", data_link);'
				+' setTitle( "[R] "+currentTitle)'
				+'}'
				+'}'
				+'function timerMessage(e){'
				+'var el = e.target||e,'
				+' data_remain = $(el).attr("data-remain"),'
				+' data_autodl = $(el).attr("data-autodl"),'
				+' data_insideframe = $(el).attr("data-insideframe");'
				+'if( data_insideframe ){'
				+' parent.timerMessage(data_remain);'
				+'}else{'
				+' setTitle( "["+data_remain+"] "+currentTitle)'
				+'}'
				+'}'
		}
	};


	//=== mini-functions
	// static routine
	function isDefined(x)   { return !(x == null && x !== null); }
	function isUndefined(x) { return x == null && x !== null; }
	function isString(x) { return (typeof(x)!='object' && typeof(x)!='function'); }
	function trimStr(x) { return (typeof(x)=='string' && x ? x.replace(/^\s+|\s+$/g,"") : '') };
	function isLink(x) { return x.match(/((?:http(?:s|)|ftp):\/\/)(?:\w|\W)+(?:\.)(?:\w|\W)+/); }
	function dump(x){return ("undefined" != typeof JSON ? JSON.stringify(x) : x)}

	function createTextEl(a) {
		return document.createTextNode(a)
	}
	function createEl(a, b, c) {
		var d = document.createElement(a);
		for (var e in b) if (b.hasOwnProperty(e)) d.setAttribute(e, b[e]);
		if (c) d.innerHTML = c;
		return d
	}
  function getTag(name, parent) {
    if(isUndefined(parent)) {
      parent = document
    }
    return parent.getElementsByTagName(name)
  }
	function getValue(key, cb) {
		var data=OPTIONS_BOX[key];
		if( !data ) return;
		setTimeout(function(){
			var ret = GM_getValue(key,data[0]);
			if('function' == typeof cb)
				cb(ret);
			else if(cb)
				cb = ret;
		}, 0);
	}
	function setValue(key, value, cb) {
		var data=OPTIONS_BOX[key];
		if( !data ) return;
		setTimeout(function(){
			var ret = GM_setValue(key,value);
			if('function' == typeof cb)
				cb(ret);
			else if(cb)
				cb = ret;
		}, 1);
	}



  function ApiBrowserCheck() {
  	
    if(typeof unsafeWindow == "undefined") {
      unsafeWindow = window
    }
    if(typeof GM_log == "undefined") {
      GM_log = function(msg) {
        try {
          unsafeWindow.console.log("GM_log: " + msg)
        }catch(e) {
        }
      }
    }
    var needApiUpgrade = false;
    if(window.navigator.appName.match(/^opera/i) && typeof window.opera != "undefined") {
      needApiUpgrade = true;
      gvar.isOpera = true;
      GM_log = window.opera.postError;
      show_alert("Opera detected...", 0)
    }
    if(typeof GM_setValue != "undefined") {
      var gsv;
      try {
        gsv = GM_setValue.toString()
      }catch(e) {
        gsv = ".staticArgs.FF4.0b"
      }
      if(gsv.indexOf("staticArgs") > 0) {
        gvar.isGreaseMonkey = true;
        gvar.isFF4 = false;
        show_alert("GreaseMonkey Api detected" + ((gvar.isFF4 = gsv.indexOf("FF4.0b") > 0) ? " on FF4.0b" : "") + "...", 0)
      }else {
        if(gsv.match(/not\s+supported/)) {
          needApiUpgrade = true;
          gvar.isBuggedChrome = true;
          show_alert("Bugged Chrome GM Api detected...", 0)
        }
      }
    }else {
      needApiUpgrade = true;
      show_alert("No GM Api detected...", 0)
    }
    gvar.noCrossDomain = gvar.isOpera || gvar.isBuggedChrome;
    if(needApiUpgrade) {
      GM_isAddon = true;
      show_alert("Try to recreate needed GM Api...", 0);
      var ws = null;
      try {
        ws = typeof unsafeWindow.localStorage
      }catch(e) {
        ws = null
      }
      if(ws == "object") {
        show_alert("Using localStorage for GM Api.", 0);
        GM_getValue = function(name, defValue) {
          var value = unsafeWindow.localStorage.getItem(GMSTORAGE_PATH + name);
          if(value == null) {
            return defValue
          }else {
            switch(value.substr(0, 2)) {
              case "S]":
              return value.substr(2);
              case "N]":
              return parseInt(value.substr(2));
              case "B]":
              return value.substr(2) == "true"
            }
          }
          return value
        };
        GM_setValue = function(name, value) {
          switch(typeof value) {
            case "string":
            unsafeWindow.localStorage.setItem(GMSTORAGE_PATH + name, "S]" + value);
            break;
            case "number":
            if(value.toString().indexOf(".") < 0) {
              unsafeWindow.localStorage.setItem(GMSTORAGE_PATH + name, "N]" + value)
            }
            break;
            case "boolean":
            unsafeWindow.localStorage.setItem(GMSTORAGE_PATH + name, "B]" + value);
            break
          }
        };
        GM_deleteValue = function(name) {
          unsafeWindow.localStorage.removeItem(GMSTORAGE_PATH + name)
        }
      }else {
        if(!gvar.isOpera || typeof GM_setValue == "undefined") {
          show_alert("Using temporarilyStorage for GM Api.", 0);
          gvar.temporarilyStorage = new Array;
          GM_getValue = function(name, defValue) {
            if(typeof gvar.temporarilyStorage[GMSTORAGE_PATH + name] == "undefined") {
              return defValue
            }else {
              return gvar.temporarilyStorage[GMSTORAGE_PATH + name]
            }
          };
          GM_setValue = function(name, value) {
            switch(typeof value) {
              case "string":
              ;
              case "boolean":
              ;
              case "number":
              gvar.temporarilyStorage[GMSTORAGE_PATH + name] = value
            }
          };
          GM_deleteValue = function(name) {
            delete gvar.temporarilyStorage[GMSTORAGE_PATH + name]
          }
        }
      }
      if(typeof GM_openInTab == "undefined") {
        GM_openInTab = function(url) {
          unsafeWindow.open(url, "")
        }
      }
      if(typeof GM_registerMenuCommand == "undefined") {
        GM_registerMenuCommand = function(name, cmd) {
          GM_log("Notice: GM_registerMenuCommand is not supported.")
        }
      }
      if(!gvar.isOpera || typeof GM_xmlhttpRequest == "undefined") {
        show_alert("Using XMLHttpRequest for GM Api.", 0);
        GM_xmlhttpRequest = function(obj) {
          var request = new XMLHttpRequest;
          request.onreadystatechange = function() {
            if(obj.onreadystatechange) {
              obj.onreadystatechange(request)
            }
            if(request.readyState == 4 && obj.onload) {
              obj.onload(request)
            }
          };
          request.onerror = function() {
            if(obj.onerror) {
              obj.onerror(request)
            }
          };
          try {
            request.open(obj.method, obj.url, true)
          }catch(e) {
            if(obj.onerror) {
              obj.onerror({readyState:4, responseHeaders:"", responseText:"", responseXML:"", status:403, statusText:"Forbidden"})
            }
            return
          }
          if(obj.headers) {
            for(name in obj.headers) {
              request.setRequestHeader(name, obj.headers[name])
            }
          }
          request.send(obj.data);
          return request
        }
      }
    }
    GM_getIntValue = function(name, defValue) {
      return parseInt(GM_getValue(name, defValue), 10)
    }
  }
  function clog(msg) {
    if(!gvar.__DEBUG__) {
      return
    }
    show_alert(msg)
  }
  function show_alert(msg, force) {
    if(!gvar.__DEBUG__) {
      return
    }
    if(arguments.callee.counter) {
      arguments.callee.counter++
    }else {
      arguments.callee.counter = 1
    }
    GM_log("(" + arguments.callee.counter + ") " + msg);
    if(force == 0) {
      return
    }
  }
  // end of std-func



  function create_trans_iframe(link) {
    var $ifrm = $("#fake_iframe"),
    	styles = gvar.ninja_styles;
    if( !$ifrm.length ) {
      $('<iframe id="fake_iframe" src="'+link+'" style="'+styles+'" onload="parent.frameloaded()"></iframe>')
      	.prependTo($('body'));
      create_directlink_iframe();
    }else {
      $ifrm.attr('src', link);
    }
  }
  function create_directlink_iframe() {
  	var $ifrm = $("#directlink_iframe"),
  		styles = gvar.ninja_styles;
    if( !$ifrm.length ) {
      $('<iframe id="directlink_iframe" src="javascript:;" style="'+styles+'"></iframe>')
      	.prependTo($('body'));
    }
  }
	function is_download_page(){
		return /\/download\//.test(location.href);
	}

  function prefetch_download() {
  	clog('insed prefetch_download');
  	$.post(gvar.prefetch.prefetchUri, gvar.prefetch.prefetchParams, function(ret){
  		if( ret ){
  			$('#btn_timer')
	  			.attr('data-remain', 0)
	  			.trigger('click')
  			;
  			gvar.sTryCounter && clearInterval(gvar.sTryCounter);
  			$('#btn_storelink')
	  			.attr('data-link', ret)
	  			.trigger('click')
  			;
  		}
  	})
  }


	function start_Main(){
		clog('start_Main');

		var $downloadBtn = $('.downloadBtn'),
			is_inside_iframe = ( window !== window.top )
		;
		GM_addGlobalStyle(rSRC.getCSS(), 'parent-style', true);

		if( is_download_page() ){
			$downloadBtn.length && (function($el){
				// do what and then...
				GM_addGlobalScript(rSRC.getSCRIPT(), 'parent-script', true);
				
				$downloadBtn.closest('.block')
					.wrap($('<div class="wrap-actions"></div>'));
				$('.wrap-actions')
					.prepend($('<div class="btitle"><a href="'+gvar.apps_src+'" target="_blank">'+gvar.apps_title+'</a></div>'))
					.prepend($('<div class="btn_toggle_autodl"><label for="btn_autodl"><input id="btn_autodl" type="checkbox" '+(gvar.settings.auto_dl ? ' checked="checked"':'')+' />&nbsp;Auto Download<label></div>'))
					.append('<div class="tips hide">*When "Download Rede" and download is not working, try it with "Save Link As.."</div>')
				;

				window.setTimeout(function(){
					create_trans_iframe($el.href);
				}, 234);
			})($downloadBtn[0]);
		}
		else{
			// assumed is page of /downloads/ 
			GM_addGlobalScript(rSRC.getSCRIPT_Framed(), 'iframe-script', true);
			
			var $tgt_title = $('.alpha.omega>h6.title');
			$tgt_title.wrapInner('<div class="btitle" />');
			$tgt_title.find('.btitle').html('<a href="'+gvar.apps_src+'" target="_blank">'+gvar.apps_title+'</a>');
			$tgt_title
				.append($('<div class="btn_toggle_autodl"><label for="btn_autodl"><input id="btn_autodl" type="checkbox" '+(gvar.settings.auto_dl ? ' checked="checked"':'')+'/>&nbsp;Auto Download<label></div>'))
			;
			

			clog('we are on downloads');
			var $bodyContainer = $('#bodyContainer'),
				$scripts = getTag('script', $bodyContainer.get(0)),
				$targetScript = null
			;

			for(var i=0; i<$scripts.length; ++i){
				if( String($scripts[i].innerHTML).match(/\$\.post\b/) ){
					$targetScript = $scripts[i]; break;
				}
			}
			if( $targetScript ){
				var re = new RegExp('\\$\\.p'+''/*_^_^V_*/+'o'+'st\\([\\\'\\\"]([^\\\'\\\"]+).(?:\\s+)?,(?:\\s+)?(\\{[^\\}]+.)', "");
				if( cucok = re.exec($targetScript.innerHTML) ){
					var params_;
					try{
						params_ = eval('('+cucok[2]+')');
					}
					catch(e){params_={}}
					gvar.prefetch = {
						prefetchUri: cucok[1],
						prefetchParams: params_
					};

					window.setTimeout(function(){
						prefetch_download();
					}, 345);

					window.setTimeout(function(){
						$downloadBtn = $('#downloadBtn');
						var cucok, remain;
						gvar.remain = 25;
						if(cucok = /\s\((\d+)s\)/.exec($downloadBtn.val()) ){
							remain = cucok[1];
							gvar.remain = remain;
						}
					}, 1);

					if( !is_inside_iframe )
						create_directlink_iframe();
					
					gvar.sTryCounter = setInterval(function(){
						var $tgt = $('#btn_timer');
						if( gvar.remain > 0 ){
							$tgt
								.attr('data-remain', gvar.remain)
								.trigger('click')
							;
						}
						else{
							clearInterval(gvar.sTryCounter);
						}
						$tgt.val(gvar.remain);
						gvar.remain--;
					}, 1000);
					
				}
				else{
					clog('regex failed');
				}
			}
			else{
				clog('targetScript not found');
			}

			$('<input id="btn_storelink" data-autodl="'+(gvar.settings.auto_dl ? '1':'')+'" data-insideframe="'+(is_inside_iframe ? '1':'')+'" data-link="" type="button" onclick="return storeLink(this)" value="StoreLink" />')
				.appendTo($bodyContainer);
			$('<input id="btn_timer" data-autodl="'+(gvar.settings.auto_dl ? '1':'')+'" data-insideframe="'+(is_inside_iframe ? '1':'')+'" type="button" onclick="return timerMessage(this)" value="tickTimer" />')
				.appendTo($bodyContainer);
		}

		// common events
		$('#btn_autodl').click(function(){
			var isChecked = $(this).is(":checked");
			setValue(KS + 'AUTODOWNLOAD', (isChecked ? '1':'0'), function(){
				gvar.settings.auto_dl = isChecked;
				$('#btn_storelink').attr('data-autodl', isChecked ? '1':'');
				$('#btn_timer').attr('data-autodl', isChecked ? '1':'');
			});
		})
	}

	(function init(){
		ApiBrowserCheck();
		
		gvar.settings = {};
		gvar.ninja_styles = 'position:absolute!important; overflow:hidden; left:-99999; height:0!important; width:0;';
		//gvar.settings.auto_dl = !1;
		
		// getSettings
		getValue(KS + 'AUTODOWNLOAD', function(ret){
			gvar.settings.auto_dl = (ret && ret=='1' ? true:false);

			var destination = $('.block>h1.title:first,.alpha.omega>h6.title').offset().top,
				scOffset = 30,
				delay = 350,
				landed = 0
			;
			$("html:not(:animated),body:not(:animated)").animate({ scrollTop: (destination-scOffset)}, delay, function() {
				if(landed) return;
				start_Main();
				landed = 1;
			});
		});
	})();
	}
	// main

	function addJQuery(callback) {
		var script = document.createElement("script");
		script.setAttribute("src", location.protocol + "\/\/ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js");
		script.addEventListener('load', function() {
			var script = document.createElement("script");
			script.textContent = "(" + callback.toString() + ")();";
			document.body.appendChild(script);
		}, false);
		document.body.appendChild(script);
	}
	addJQuery( main );
})();
/* Mod By Idx. */