아... 역시 별건 아니고..
클라이언트중 하나가 아우스 오른쪽 버튼이랑 키보드 복사 등등을 막아 컨텐츠를 복사하는것을 막아 달래서..
그거 쉽게 뚫려서 효과 없는데... 하다가 jquery에 비슷한 플러그인 있나 보다가 없어서 이리저리 뒤져보다가 재미난 것들을 두가지를 발견했다.
첫째는 마우스 오른쪽 버튼 감지 하는 플러그인.
둘째는 키보드 단축키 감지 하는 플러그인.
이 둘을 조합하면 먼가 되겠다 싶어서.. 해봤는데 잘된다.. 물론 jquery랑 위 두개의 플러그인을 불러 들여야 하지만 쓸만허다..
- $(document).ready( function() {
- //no mouse right button
- $("html").rightClick(function(e){}).noContext();
- //no key
- $(document).bind('keydown', 'ctrl+a', function(){return false;}).bind('keydown', 'ctrl+c', function(){return false;});
- //no drag
- $(document).mousedown(function(){$(document).mousemove(function(e){return false;});});
- });
이거 때문에 jquery랑 플러그인 두개를 써야 한다는게 좀 그렇지만.. 아무튼 쓸만..
부탁 받은 사이트는 이렇게 그냥 다 함께 써버린다.. jquery는 덩치가 크니까 따로 불러서.. 복사해서 걍써도 잘될것이다..
- /*mouseR button***************************************************************/
- 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);
- /*****************************************************************************/
- /*hotkey**********************************************************************/
- (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;}
- 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];}}
- 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);}
- else{var result=null,pass2jq=jQuery.trim(type.replace(hotkeys.override,''));if(pass2jq){result=this.__bind__(pass2jq,data,fn);}
- if(typeof data==="string"){data={'combi':data};}
- 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;}
- else if(!hotkeys.triggersMap[selectorId][eventType]){hotkeys.triggersMap[selectorId][eventType]=trigger[eventType];}
- var mapPoint=hotkeys.triggersMap[selectorId][eventType][combi];if(!mapPoint){hotkeys.triggersMap[selectorId][eventType][combi]=[trigger[eventType][combi]];}
- else if(mapPoint.constructor!==Array){hotkeys.triggersMap[selectorId][eventType][combi]=[mapPoint];}
- else{hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length]=trigger[eventType][combi];}
- this.each(function(){var jqElem=jQuery(this);if(jqElem.attr('hkId')&&jqElem.attr('hkId')!==selectorId){selectorId=jqElem.attr('hkId')+";"+selectorId;}
- jqElem.attr('hkId',selectorId);});result=this.__bind__(handle.join(' '),data,hotkeys.handler)}}
- 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;}}}
- 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;}}
- if(mapPoint){var trigger;if(!shift&&!ctrl&&!alt){trigger=mapPoint[special]||(character&&mapPoint[character]);}
- 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]]);}}}
- 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;}}
- result=result||trigger[x].cb.apply(this,[event]);}
- return result;}}}};window.hotkeys=hotkeys;return jQuery;})(jQuery);
- /*****************************************************************************/
- $(document).ready( function() {
- //no mouse right button
- $("html").rightClick(function(e){}).noContext();
- //no key
- $(document).bind('keydown', 'ctrl+a', function(){return false;}).bind('keydown', 'ctrl+c', function(){return false;});
- //no drag
- $(document).mousedown(function(){$(document).mousemove(function(e){return false;});});
- });
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
'웹개발자의 > jquery' 카테고리의 다른 글
getJSON 을 활용한 간단한 값 가져오기 (0) | 2011/02/24 |
---|---|
jquery bgImageTween (0) | 2011/01/19 |
[jquery] 마우스 오른쪽 버튼, 복사 막기, 드래그 금지(불펌방지) (0) | 2010/10/18 |
Javascript - Jquery 링크모음 (0) | 2010/10/18 |
jquery lightbox plugin 이미지 겔러리 이쁘게 보이게 하는거 (2) | 2010/10/08 |
[jQuery 기본 강좌]1-3 jquery 자동완성 autocomplete 기능 쉽게 적용하기 (2) | 2010/07/08 |
댓글을 달아 주세요