「gm_Link_Invalidity」の編集履歴(バックアップ)一覧に戻る

gm_Link_Invalidity - (2009/02/17 (火) 09:31:04) のソース

**Link_Invalidity
-ダウンロードは一番下の添付より行ってください
	// ==UserScript==
	// @name           Link_Invalidity
	// @namespace      Link_Invalidity
	// @include        *
	// ==/UserScript==
	var maHref = new Array();
	var mbSwitch = false;
	
	function a_href_chenge(){
		if( mbSwitch == false){
			a_href_off();
			mbSwitch = true;
		}else{
			a_href_on();
			mbSwitch = false;
		}
	}
	
	/**
	 * リンクエレメント無効
	 * 全リンクのナビゲーション値を保存
	 * リンクタグ(「A」)のオブジェクトを全取得し
	 * ナビゲーション属性(「href」)を削除する
	 */
	function a_href_off(){
		// リンクパスを保存
		gethref();
		var aobj = document.getElementsByTagName( 'A');
		for( i = 0; aobj.length > i; i++){
			aobj[i].removeAttribute( 'href');
		}
		//document.forms[0].elements[0].disabled = true;
		//document.forms[0].elements[1].disabled = false;
	}
	
	/**
	 * リンクエレメント有効
	 * リンクタグ(「A」)のオブジェクトを全取得し
	 * ナビゲーション属性(「href」)を設定する
	 * 値は保存しておいた値を使用する
	 */
	function a_href_on(){
		var aobj = document.getElementsByTagName( 'A');
		for( i = 0; aobj.length > i; i++){
			aobj[i].setAttribute( 'href', maHref[i]);
		}
		//document.forms[0].elements[0].disabled = false;
		//document.forms[0].elements[1].disabled = true;
	}
	
	/**
	 * 全リンクエレメントのナビゲーション値を一時保存
	 * リンクタグ(「A」)のオブジェクトを全取得し
	 * ナビゲーション属性(「href」)の値を配列に設定する
	 */
	function gethref(){
		if( maHref.length <= 0){
			var aobj = document.getElementsByTagName( 'A');
			for( i = 0; aobj.length > i; i++){
				maHref[i] = aobj[i].getAttribute( 'href');
			}
		}
	}
	
	/**	
	 * documentに対するkeydownイベントの処理設定をする。
	 * 第1引数でキーを指定し、
	 * 第2引数で指定されたキーが押し下げられたときに実行する関数を指定する。
	 * ただし、INPUT要素、TEXTAREA要素に対するキーイベントの場合は何もしない。
	 */
	var keybind = ( function(){
		function add ( phrase, func){
			if( phrase instanceof Array){
				phrase.forEach( function( p){
					add( p, func);
				});
			} else {
				document.addEventListener( "keydown", function( event){
					var tagName = event.target.tagName;
					if( phrase == code( event) && !tagName.match(/(INPUT|TEXTAREA)/i)){
						func();
						event.preventDefault();
						event.stopPropagation();
					}
				}, true);
			}
		}
		function code( event){
			var code = [];
			if( event.shiftKey){
				code.push("SHIFT");
			} 
			if( event.ctrlKey){
				code.push("CTRL");
			} 
			if( event.altKey || event.metaKey){
				code.push("ALT");
			}
			var vkey = kc2char( event.keyCode);
			if( vkey != ""){
				code.push( kc2char( event.keyCode));
			}
	
			GM_log( code.join( "-"));
	
			return code.join( "-");
	
			function kc2char( kc){
				function between( a, b){
					return a <= kc && kc <= b;
				}
				var _32_40 = "space pageup pagedown end home left up right down".split(" ");
				var kt = {
				     8 : "backspace",
				     9 : "tab"  ,
				    13 : "enter",
				    16 : "",
				    17 : "",
				    27 : "escape",
				    46 : "delete",
				    59 : ":",
				   107 : ";",
				   109 : "-",
				   188 : ",",
				   190 : ".",
				   191 : "/",
				   192 : "@",
				   219 : "[",
				   220 : "\\",
				   221 : "]",
				   222 : "^",
				   226 : "\\",
				};
	
					//16 : "shift",
					//17 : "control",
	
				return ( between( 65, 90)  ? String.fromCharCode( kc + 32) :	// a-z
					between( 48, 57)  ? String.fromCharCode( kc) :				// 0-9
					between( 96, 105) ? String.fromCharCode( kc - 48) :			// num 0-9
					between( 32, 40)  ? _32_40[kc-32] :
					kt.hasOwnProperty( kc) ? kt[kc] : 
					kc);
			}
		}
		return add;
	})();
	
	
	keybind( "SHIFT-CTRL", a_href_chenge); 
記事メニュー
目安箱バナー