사용자 자바스크립트로 불편한 사이트 개선하기

dev | 2011-05-28

오페라 사용자 자바스크립트(Opera User Javascript)는 사용자가 만든 자바스크립트를 웹 페이지에서 구동시키는 기능입니다. 사용자 자바스크립트를 사용하면 내가 사용하는 웹 페이지에 기능을 추가하거나 바꿀 수 있습니다. 그래서 사용자 자바스크립트로 만든 유용한 기능들을 사용자들이 공유하기도 합니다.

이 사용자 자바스크립트는 "AdSweep으로 구글 크롬, 오페라의 광고 차단하기"에서 소개한 것 처럼 오페라 외의 다른 브라우저에서도 다양한 방법으로 사용할 수 있습니다.

상상하시는 것 처럼 막강한 기능을 가지고 있기 때문에 혹시 있을지 모르는 보안 문제에 대해서 고려할 필요가 있습니다. 출처가 불분명한 사용자 자바스크립트를 마구 사용해서는 안됩니다. 혹시 있을지 모를 보안 사고 때문에 https 프로토콜에서는 기본적으로 꺼져있습니다. 주소창에 opera:config#UserPrefs|UserJavaScriptonHTTPS를 입력해서 설정을 바꿔주면 되지만 되도록 하지 않는 것이 좋습니다.

저는 이 사용자 자바스크립트를 웹사이트를 사용하면서 불편한 기능들을 없애는데 주로 사용합니다. 예를 들어서 네이버 까페에서 글을 복사할때 자동 출처를 붙여주는데 제의도와는 맞지 않게 불필요한 내용이 붙기 때문에 아주 불편합니다. 특히 오페라에서는 글의 전문이 출처로 붙는 경우가 있어서 가끔 제목을 메신저에 복사해 넣고 엔터키를 치면 전문이 다 올라가서 당황하게 됩니다. 매번 의도하지 않게 들어간 내용을 지우는 것이 귀찮아서 사용자 자바스크립트로 기능을 지워보았습니다.

if (hostname.indexOf('cafe.naver.com') > -1) {
	window.opera.defineMagicFunction('initAutoAndRight', function () {});     //oncontextmenu
	window.opera.defineMagicFunction('checkParent', function () {});     //parent frame
	window.opera.addEventListener('BeforeScript', function(e) {
		e.element.text = e.element.text.replace("AutoSourcing.init( 'post_%id%' , true );", '');     //clipboard
	}, false);
}

사용자 자바스크립트는 모든 웹페에지에서 구동되기 때문에 도메인으로 구분을 해주는 것이 좋습니다. AutoSourcing이라는 객체에 기능이 들어 있는데 이 기능을 초기화 하는 스크립트 구문을 BeforeScript 이벤트에서 replace로 지워주면 됩니다. BeforeScript라는 이벤트는 스트립트 요소가 해석되기 전에 발생하는 이벤트 입니다. 이 이벤트에서 스크립트 내부의 텍스트를 스크립트가 실행되기 전에 고칠 수 있습니다.

이 외에도 오른쪽 마우스 클릭은 initAutoAndRight라는 함수로 막고 있고 상위 프레임을 검사하는 기능은 checkParent 함수로 되어 있는데 이 역시 불편한 기능입니다. defineMagicFunction이라는 메서드로 이들 함수를 빈 함수로 재정의 해주면 됩니다.

지마켓도 사용자가 마우스 오른쪽 클릭을 하면 콘텐츠를 도둑질 하려는 사람으로 몰아세웁니다. 이 기능도 사용자 자바스크립트를 만들어서 간단히 무력화 시킬 수 있습니다.

if (hostname.indexOf('gmarket.co.kr') > -1) {
	window.opera.defineMagicFunction('mouseRightButtonDisabled', function () {});     //oncontextmenu
	window.addEventListener('DOMContentLoaded', function() {
		document.querySelector('body').oncontextmenu = document.querySelector('body').ondragstart = document.querySelector('body').onselectstart = null;
	},false);
}

오페라용 user.js 예제 파일

사용자 자바스크립트는 웹사이트를 사용자가 스스로 입맛에 맞게 바꿔서 사용할 수 있도록 해서 사용자의 권한을 확대해주는 막강한 기능입니다. 보다 자세한 내용과 스크립트 제작 방법은 오페라 사이트의 사용자 자바스크립트 문서에서 확인해 보세요.

Comments

  • 웅이 2011-05-28

    감사합니다. 그러지 않아도 신경쓰이던 것들이었는데. 신현석님, 네이버 블로그 덧글 클릭하면 열리지 않는 현상이 있잖아요? 현석님은 이건 어떤 식으로 해결하시나요? 그냥 익스플로러를 키시나요? 보니까 모바일 페이지에서는 (덧글이)잘 열리고 PC페이지에서는 안 열리는 것 봐서는 표준을 지키지 않거나 익스플로러나 파이어폭스에만 적용되도록 한 듯 싶은데.

  • 신현석 2011-05-28

    네이버 블로그 덧글 안보이는거 아주 불편하죠. 그런데 저는 많이 쓰지는 않아서 그냥 다른 브라우저 열어서 보곤 했어요. 에이젝스 관련된 부분이래서 오페라 버그이거나 보안 관련된 부분일 수 있다는 생각이 들기는 하는데 시간나면 한번 살펴봐야 겠습니다.

  • opera 2011-05-28

    >> 오른쪽 마우스 버튼 메뉴 -> Frame -> Open 또는 Open in New Tab -> 덧글 보기

  • 신현석 2011-05-29

    프레임 벗기는 것 만으로는 잘 안되는데 다른 좋은 방법 더 없을까요?

  • opera 2011-05-29

    @신현석 >> 덧글, 엮인글, 공감 '다른' 링크(버튼) 클릭 -> 덧글 보기

  • 신현석 2011-05-29

    아~ 다른 버튼들을 눌렀다 댓글을 누르니까 또 작동을 하네요.

  • opera 2011-05-29

    @신현석 '공감' 링크는 상관없고, '엮인글' 링크가 없는 '덧글' 링크만 있는 곳은 안되더군요. 위 두 가지 방법은 무시하고, 다음 주소를 차단합니다. http://itemimgs.naver.com/outlinefont/* (* Tools -> Advanced -> Blocked Content) - Error Console Internal - http://itemimgs.naver.com/outlinefont/73/37/1003773_10.eot webfont discarded - malformed Internal - http://itemimgs.naver.com/outlinefont/99/76/3207699_9.eot webfont discarded - malformed Internal - http://itemimgs.naver.com/outlinefont/46/85/3028546_9.eot webfont discarded - malformed

  • opera 2012-01-18

    네이트 뉴스 본문 더블클릭하여 검색시 이것 때문에 불편했었는데 덕분에 편해졌네요. 감사드립니다!

Post a comment

:

: 공개 되지 않습니다. Gravatar를 표시 합니다.

:

: HTML 태그를 사용할 수 없습니다.