북마클릿

북마클릿(bookmarklet)은 웹 브라우저에 저장된 북마크로, 브라우저에 새로운 기능을 추가하는 자바스크립트 명령어를 포함한다. 이들은 웹 브라우저의 북마크 URL 또는 웹 페이지의 하이퍼링크로 저장된다. 북마클릿은 일반적으로 사용자가 클릭하면 실행되는 작은 자바스크립트 스니펫이다. 클릭하면 북마클릿은 선택된 텍스트에서 검색 쿼리를 실행하거나 테이블에서 데이터를 추출하는 등 다양한 작업을 수행할 수 있다.
북마클릿의 또 다른 이름은 즐겨찾기(북마크의 동의어)에서 파생된 페이블릿 또는 파블릿이다.[1]
역사
bookmarklets.com의 스티브 캉가스는 넷스케이프의 자바스크립트 가이드의 제안을 바탕으로 짧은 스크립트를 만들기 시작하면서 북마클릿이라는 단어를 만들었다.[2][3] 그 이전에 탄텍 첼릭은 이 스크립트들을 페이블릿이라고 불렀고 2001년 9월 6일(개인 이메일)에 이 단어를 사용했다. 넷스케이프에서 자바스크립트를 개발한 브렌던 아이크는 북마클릿의 기원에 대해 다음과 같이 설명했다.
이러한 의미에서 이것들은 의도적인 기능이었다. 나는 1995년에 자바스크립트와 함께
javascript:URL을 발명했으며,javascript:URL이 북마크 가능함을 포함하여 다른 종류의 URL처럼 사용될 수 있도록 의도했다. 특히,javascript:'hello, world'와 같이 로드하여 새 문서를 생성할 수 있도록 만들었지만, (북마클릿의 핵심) 현재 문서의 DOM에 대해 임의의 스크립트를 실행할 수 있도록 했다. 예를 들어,javascript:alert(document.links[0].href)와 같이 말이다. 차이점은 후자의 URL 유형이 JS에서 정의되지 않은 유형으로 평가되는 표현식을 사용한다는 것이다. 나는 넷스케이프 2가 출시되기 전에 JS에 void 연산자를 추가하여javascript:URL에서 정의되지 않은 값 이외의 값을 쉽게 버릴 수 있도록 했다.
웹사이트에서 콘텐츠 보안 정책 (CSP)의 구현이 증가하면서 북마클릿 실행 및 사용에 문제가 발생했다(2013–2015).[5] 일부는 이것이 북마클릿의 종말을 예고한다고 주장했다.[6][7] 윌리엄 도넬리(William Donnelly)는 2015년 초에 그리스몽키 사용자 스크립트 (모질라 파이어폭스 / 페일 문 브라우저 애드온 확장)와 간단한 북마클릿-사용자 스크립트 통신 프로토콜을 사용하여 이 문제(특히 자바스크립트 라이브러리 코드 로드, 참조 및 사용의 특정 경우)에 대한 해결책을 만들었다.[8] 이를 통해 (라이브러리 기반) 북마클릿은 CSP를 사용하고 https:// URI 스키마를 가진 모든 웹사이트에서 실행될 수 있다. 그러나 브라우저가 CSP를 사용하여 인라인 스크립트 실행을 비활성화/허용하지 않는 것을 지원하고, 웹사이트가 해당 기능을 구현하기 시작하면 이 "수정"이 "깨질" 것이다.
개념
웹 브라우저는 <a> 태그의 href 속성과 북마크에 URI를 사용한다. http 또는 ftp와 같은 URI 스키마는 일반적으로 프로토콜을 지정하며, 나머지 문자열의 형식을 결정한다. 브라우저는 또한 파서에게 다른 URI와 동일하게 처리되는 javascript: URI를 구현한다. 브라우저는 지정된 javascript 스키마를 인식하고 나머지 문자열을 자바스크립트 프로그램으로 처리하여 실행한다. 표현식 결과가 있다면, 원래 페이지 대신 표시되는 새 페이지의 HTML 소스 코드로 처리된다.
실행 스크립트는 현재 페이지에 접근하여 검사하고 변경할 수 있다. 스크립트가 정의되지 않은 유형(예를 들어, 문자열이 아닌)을 반환하면 브라우저는 새 페이지를 로드하지 않으며, 그 결과 스크립트는 현재 페이지 내용에 대해 간단히 실행된다. 이를 통해 페이지 다시 로드 없이 글꼴 크기 및 색상 변경과 같은 변경이 가능하다.
값을 반환하지 않는 즉시 실행 함수 또는 void 연산자가 앞에 오는 표현식은 브라우저가 평가 결과를 HTML 마크업 스니펫으로 구문 분석하려고 시도하는 것을 방지한다.
javascript:(function(){
//Statements returning a non-undefined type, e.g. assignments
})();
사용법
북마클릿은 일반 북마크처럼 저장되고 사용된다. 따라서 브라우저에 기능을 추가하는 간단한 "원클릭" 도구이다. 예를 들어 다음과 같은 작업을 수행할 수 있다.
- 브라우저 내에서 웹 페이지의 모양 변경 (예: 글꼴 크기, 배경색 등 변경)
- 웹 페이지에서 데이터 추출 (예: 하이퍼링크, 영상, 텍스트 등)
- (예: 구글) 검색 결과에서 리다이렉션을 제거하여 실제 대상 URL 표시[9]
- 현재 페이지를 포스터러스와 같은 블로그 서비스, bit.ly와 같은 링크 단축 서비스, 또는 딜리셔스와 같은 북마크 서비스에 제출
- 강조 표시된 텍스트 또는 대화 상자를 통해 검색 엔진 또는 온라인 백과사전에 쿼리
- 현재 페이지를 링크 유효성 검사 서비스 또는 번역 서비스에 제출
- 페이지 자체에서 이 작업을 수행할 방법이 없을 때 일반적으로 선택되는 구성 옵션 설정
- HTML5 오디오 및 비디오 재생 매개변수 제어(예: 속도, 위치, 반복 전환, 재생 컨트롤 표시/숨기기) (이 중 첫 번째는 HTML5 플레이어의 일반적인 범위 설정을 넘어 조정 가능)[10][11][12]
북마클릿 설치는 일반 북마크를 추가하는 것과 동일한 과정을 따른다. 유일한 차이점은 URL 대상 필드에 javascript:가 앞에 오는 자바스크립트 코드가 들어간다는 것이다. 일단 생성된 북마클릿은 클릭하여 실행할 수 있다.
각주
- ↑ Jonathan Avila (2014년 3월 2일). “How to create a favlet for accessibility testing”. 2018년 1월 22일에 원본 문서에서 보존된 문서. 2023년 5월 23일에 확인함.
- ↑ “Bookmarklets”. 2009년 7월 7일에 원본 문서에서 보존된 문서. registered 9 April 1998
- ↑ “Activating JavaScript Commands From the Personal Toolbar”. 《What's New in JavaScript 1.2》. Netscape Communications Corporation. 1997. 2002년 6월 11일에 원본 문서에서 보존된 문서.
- ↑ Willison, Simon (2004년 4월 10일). “Email from Brendan Eich”. SitePoint. 2014년 9월 26일에 확인함.
- ↑ “Bug 866522 - Bookmarklets affected by CSP”.
- ↑ “Bookmarklets are Dead”. 2014년 10월 23일.
- ↑ “The Slow Death of Bookmarklets”. 2012년 11월 16일.
- ↑ “The Resurrection of Bookmarklets”.
- ↑ Ruderman, Jesse. “Bookmarklets for Zapping Annoyances”. 《Jesse's Bookmarklets Site》. 2013년 3월 29일에 확인함.
- ↑ “YouTube Video Speed Bookmarklets”. 《sgeos.github.io》. 2017년 10월 29일.
- ↑ Kant, Kushal (2017년 8월 23일). “How to Use Parameters in HTML5 Video Tags/Attributes”. 《findnerd》.
- ↑ “HTML video Tag”. 《www.w3schools.com》.
외부 링크
- Calishain, Tara (2004년 2월 3일). “Bookmarklets Boost Web Surfing”. PC Magazine. 2007년 8월 31일에 확인함.
- 잘못된 파일 링크가 포함된 문서
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 웹 개발
- 자바스크립트