티스토리 툴바


아... 역시 별건 아니고..
클라이언트중 하나가 아우스 오른쪽 버튼이랑 키보드 복사 등등을 막아 컨텐츠를 복사하는것을 막아 달래서..
그거 쉽게 뚫려서 효과 없는데... 하다가 jquery에 비슷한 플러그인 있나 보다가 없어서 이리저리 뒤져보다가 재미난 것들을 두가지를 발견했다.

첫째는 마우스 오른쪽 버튼 감지 하는 플러그인.
둘째는 키보드 단축키 감지 하는 플러그인.

이 둘을 조합하면 먼가 되겠다 싶어서.. 해봤는데 잘된다.. 물론 jquery랑 위 두개의 플러그인을 불러 들여야 하지만 쓸만허다..

  1. $(document).ready( function() {   
  2.   //no mouse right button   
  3.   $("html").rightClick(function(e){}).noContext();   
  4.   //no key   
  5.   $(document).bind('keydown''ctrl+a'function(){return false;}).bind('keydown''ctrl+c'function(){return false;});   
  6.   //no drag   
  7.   $(document).mousedown(function(){$(document).mousemove(function(e){return false;});});   
  8. });  


드래그 금지도 해볼까 싶다가 관련 플러그인도 없고.. 드래그만 되면 머하나? 해서 그냥 뒀다.. 사실 드래그 해서 바탕화면에 놓기라든지, 메뉴를 이용한 저장이라던지.. 하려면 하겠지만 서두... 귀찮아서 안하는 사람도 많을거 같고..
 이거 때문에 jquery랑 플러그인 두개를 써야 한다는게 좀 그렇지만.. 아무튼 쓸만..

부탁 받은 사이트는 이렇게 그냥 다 함께 써버린다.. jquery는 덩치가 크니까 따로 불러서.. 복사해서 걍써도 잘될것이다..
 
  1. /*mouseR button***************************************************************/  
  2. if(jQuery) (function(){$.extend($.fn, {rightClick: function(handler) {$(this).each( function() {$(this).mousedown( function(e) {var evt = e;$(this).mouseup( function() {$(this).unbind('mouseup');if( evt.button == 2 ) {handler.call( $(this), evt );return false;} else {return true;}});});$(this)[0].oncontextmenu = function() {return false;}});return $(this);},rightMouseDown: function(handler) {$(this).each( function() {$(this).mousedown( function(e) {if( e.button == 2 ) {handler.call( $(this), e );return false;} else {return true;}});$(this)[0].oncontextmenu = function() {return false;}});return $(this);},rightMouseUp: function(handler) {$(this).each( function() {$(this).mouseup( function(e) {if( e.button == 2 ) {handler.call( $(this), e );return false;} else {return true;}});$(this)[0].oncontextmenu = function() {return false;}});return $(this);},noContext: function() {$(this).each( function() {$(this)[0].oncontextmenu = function() {return false;}});return $(this);}});})(jQuery);   
  3. /*****************************************************************************/  
  4.   
  5. /*hotkey**********************************************************************/  
  6. (function(jQuery){jQuery.fn.__bind__=jQuery.fn.bind;jQuery.fn.__unbind__=jQuery.fn.unbind;jQuery.fn.__find__=jQuery.fn.find;var hotkeys={version:'0.7.9',override:/keypress|keydown|keyup/g,triggersMap:{},specialKeys:{27:'esc',9:'tab',32:'space',13:'return',8:'backspace',145:'scroll',20:'capslock',144:'numlock',19:'pause',45:'insert',36:'home',46:'del',35:'end',33:'pageup',34:'pagedown',37:'left',38:'up',39:'right',40:'down',109:'-',112:'f1',113:'f2',114:'f3',115:'f4',116:'f5',117:'f6',118:'f7',119:'f8',120:'f9',121:'f10',122:'f11',123:'f12',191:'/'},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":":","'":"\"",",":"<",".":">","/":"?","\\":"|"},newTrigger:function(type,combi,callback){var result={};result[type]={};result[type][combi]={cb:callback,disableInInput:false};return result;}};hotkeys.specialKeys=jQuery.extend(hotkeys.specialKeys,{96:'0',97:'1',98:'2',99:'3',100:'4',101:'5',102:'6',103:'7',104:'8',105:'9',106:'*',107:'+',109:'-',110:'.',111:'/'});jQuery.fn.find=function(selector){this.query=selector;return jQuery.fn.__find__.apply(this,arguments);};jQuery.fn.unbind=function(type,combi,fn){if(jQuery.isFunction(combi)){fn=combi;combi=null;}   
  7. if(combi&&typeof combi==='string'){var selectorId=((this.prevObject&&this.prevObject.query)||(this[0].id&&this[0].id)||this[0]).toString();var hkTypes=type.split(' ');for(var x=0;x<hkTypes.length;x++){delete hotkeys.triggersMap[selectorId][hkTypes[x]][combi];}}   
  8. return this.__unbind__(type,fn);};jQuery.fn.bind=function(type,data,fn){var handle=type.match(hotkeys.override);if(jQuery.isFunction(data)||!handle){return this.__bind__(type,data,fn);}   
  9. else{var result=null,pass2jq=jQuery.trim(type.replace(hotkeys.override,''));if(pass2jq){result=this.__bind__(pass2jq,data,fn);}   
  10. if(typeof data==="string"){data={'combi':data};}   
  11. if(data.combi){for(var x=0;x<handle.length;x++){var eventType=handle[x];var combi=data.combi.toLowerCase(),trigger=hotkeys.newTrigger(eventType,combi,fn),selectorId=((this.prevObject&&this.prevObject.query)||(this[0].id&&this[0].id)||this[0]).toString();trigger[eventType][combi].disableInInput=data.disableInInput;if(!hotkeys.triggersMap[selectorId]){hotkeys.triggersMap[selectorId]=trigger;}   
  12. else if(!hotkeys.triggersMap[selectorId][eventType]){hotkeys.triggersMap[selectorId][eventType]=trigger[eventType];}   
  13. var mapPoint=hotkeys.triggersMap[selectorId][eventType][combi];if(!mapPoint){hotkeys.triggersMap[selectorId][eventType][combi]=[trigger[eventType][combi]];}   
  14. else if(mapPoint.constructor!==Array){hotkeys.triggersMap[selectorId][eventType][combi]=[mapPoint];}   
  15. else{hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length]=trigger[eventType][combi];}   
  16. this.each(function(){var jqElem=jQuery(this);if(jqElem.attr('hkId')&&jqElem.attr('hkId')!==selectorId){selectorId=jqElem.attr('hkId')+";"+selectorId;}   
  17. jqElem.attr('hkId',selectorId);});result=this.__bind__(handle.join(' '),data,hotkeys.handler)}}   
  18. return result;}};hotkeys.findElement=function(elem){if(!jQuery(elem).attr('hkId')){if(jQuery.browser.opera||jQuery.browser.safari){while(!jQuery(elem).attr('hkId')&&elem.parentNode){elem=elem.parentNode;}}}   
  19. return elem;};hotkeys.handler=function(event){var target=hotkeys.findElement(event.currentTarget),jTarget=jQuery(target),ids=jTarget.attr('hkId');if(ids){ids=ids.split(';');var code=event.which,type=event.type,special=hotkeys.specialKeys[code],character=!special&&String.fromCharCode(code).toLowerCase(),shift=event.shiftKey,ctrl=event.ctrlKey,alt=event.altKey||event.originalEvent.altKey,mapPoint=null;for(var x=0;x<ids.length;x++){if(hotkeys.triggersMap[ids[x]][type]){mapPoint=hotkeys.triggersMap[ids[x]][type];break;}}   
  20. if(mapPoint){var trigger;if(!shift&&!ctrl&&!alt){trigger=mapPoint[special]||(character&&mapPoint[character]);}   
  21. else{var modif='';if(alt)modif+='alt+';if(ctrl)modif+='ctrl+';if(shift)modif+='shift+';trigger=mapPoint[modif+special];if(!trigger){if(character){trigger=mapPoint[modif+character]||mapPoint[modif+hotkeys.shiftNums[character]]||(modif==='shift+'&&mapPoint[hotkeys.shiftNums[character]]);}}}   
  22. if(trigger){var result=false;for(var x=0;x<trigger.length;x++){if(trigger[x].disableInInput){var elem=jQuery(event.target);if(jTarget.is("input")||jTarget.is("textarea")||jTarget.is("select")||elem.is("input")||elem.is("textarea")||elem.is("select")){return true;}}   
  23. result=result||trigger[x].cb.apply(this,[event]);}   
  24. return result;}}}};window.hotkeys=hotkeys;return jQuery;})(jQuery);   
  25. /*****************************************************************************/  
  26.   
  27. $(document).ready( function() {   
  28.   //no mouse right button   
  29.   $("html").rightClick(function(e){}).noContext();   
  30.   //no key   
  31.   $(document).bind('keydown''ctrl+a'function(){return false;}).bind('keydown''ctrl+c'function(){return false;});   
  32.   //no drag   
  33.   $(document).mousedown(function(){$(document).mousemove(function(e){return false;});});   
  34. });  
 
2009/10/27 드래그 금지기능 추가..
사실 기존 이벤트로는 금방 뚫려서 시도 해보지도 않았었는데 jquery이벤트로 처리 하니까 안풀리더라... 한줄 추가 했을뿐인데 말이지..
요거 잼나는데.. 조만간 플러그인 두개 없애 버보리고 통합된기능으로 새도해 볼까 싶다..
그리고 브라우저별로 문제가 있는데..
IE 6, 7, 8 : 마우스 O, 키보드 O, 드래그 O,  모두 잘된다..
Chrome     : 마우스 O, 키보드 O, 드래그 O,  모두 잘된다..
Firefox    : 마우스 O, 키보드 O, 드래그 X, 드래그 방지 기능 안된다..
Safari     : 마우스 O, 키보드 O, 드래그 O,  모두 잘된다..
Opera      : 마우스 X,  키보드 X, 드래그 X,  모든기능 안된다.(아무튼 오페라.. 별나..)

yesClick이나 Spell,IEToy 그리스몽키로도 아직은 못푼다 ㅋㅋ
혹여 이 스크립트를 사용한 곳을 발견한다면 오페라로.. ㅎㅎ

** 2009/12/21
간혹 드래그 금지 기능과 플래시로 드롭다운 메뉴를 만들었을때 상성이 좋지 못한 결과를 가져올때가 있습니다. 그런 경우 드래그 금지는 주석 처리 하고 사용하세요..  그래그 금지 해제 원하는 결과는 얻을 수 있었습니다.





출처 : http://blog.bits.kr/127
저작자 표시 비영리 변경 금지

http://jaweb.tistory.com/trackback/178 관련글 쓰기

댓글을 달아 주세요