A Firefox browser with a dialog reading "There are about 2502 words on this page."
Demonstration of a bookmarklet that counts the number of words on the page. The browser shown is Firefox 65.0.2 running on Windows 10.

A bookmarklet is a bookmark stored in a web browser that contains JavaScript commands that add new features to the browser. They are stored as the URL of a bookmark in a web browser or as a hyperlink on a web page. Bookmarklets are usually small snippets of JavaScript executed when user clicks on them. When clicked, bookmarklets can perform a wide variety of operations, such as running a search query from selected text or extracting data from a table.

Another name for bookmarklet is favelet or favlet, derived from favorites (synonym of bookmark).[1]


Steve Kangas of bookmarklets.com coined the word bookmarklet[2] when he started to create short scripts based on a suggestion in Netscape's JavaScript guide.[3] Before that, Tantek Çelik called these scripts favelets and used that word as early as on 6 September 2001 (personal email[clarification needed]). Brendan Eich, who developed JavaScript at Netscape, gave this account of the origin of bookmarklets:

They were a deliberate feature in this sense: I invented the javascript: URL along with JavaScript in 1995, and intended that javascript: URLs could be used as any other kind of URL, including being bookmark-able. In particular, I made it possible to generate a new document by loading, e.g. javascript:'hello, world', but also (key for bookmarklets) to run arbitrary script against the DOM of the current document, e.g. javascript:alert(document.links[0].href). The difference is that the latter kind of URL uses an expression that evaluates to the undefined type in JS. I added the void operator to JS before Netscape 2 shipped to make it easy to discard any non-undefined value in a javascript: URL.

— Brendan Eich, in an email to Simon Willison[4]

The increased implementation of Content Security Policy (CSP) in websites has caused problems with bookmarklet execution and usage (2013-2015),[5] with some suggesting that this hails the end or death of bookmarklets.[6][7] William Donnelly created a work-around solution for this problem (in the specific instance of loading, referencing and using JavaScript library code) in early 2015 using a Greasemonkey userscript (Firefox / Pale Moon browser add-on extension) and a simple bookmarklet-userscript communication protocol.[8] It allows (library-based) bookmarklets to be executed on any and all websites, including those using CSP and having an https:// URI scheme. Note, however, that if/when browsers support disabling/disallowing inline script execution using CSP, and if/when websites begin to implement that feature, it will "break" this "fix".


Web browsers use URIs for the href attribute of the <a> tag and for bookmarks. The URI scheme, such as http:, file:, or ftp:, specifies the protocol and the format for the rest of the string. Browsers also implement a prefix javascript: that to a parser is just like any other URI. Internally, the browser sees that the specified protocol is javascript, treats the rest of the string as a JavaScript application which is then executed, and uses the resulting string as the new page.

The executing script has access to the current page, which it may inspect and change. If the script returns an undefined type (rather than, for example, a string), the browser will not load a new page, with the result that the script simply runs against the current page content. This permits changes such as in-place font size and color changes without a page reload.

An anonymous function that does not return a value, define a function, etc., can be used to force the script to return an undefined type:

  //Statements returning a non-undefined type, e.g. assignments

However, if a script includes a function definition/redefinition, such as function Use_this_globally(){...}, the environment will not be populated with it. For this reason an {arbitrary script} should be wrapped in void(...);.

javascript:void({arbitrary script});


Bookmarklets are saved and used as normal bookmarks. As such, they are simple "one-click" tools which add functionality to the browser. For example, they can:


"Installation" of a bookmarklet is performed by creating a new bookmark, and pasting the code into the URL destination field. Alternatively, if the bookmarklet is presented as a link, under some browsers it can be dragged and dropped onto the bookmark bar. The bookmarklet can then be run by loading the bookmark normally.


This example bookmarklet performs a Wikipedia search on any highlighted text in the web browser window. In normal use, the following JavaScript code would be installed to a bookmark in a browser[13] bookmarks toolbar. From then on, after selecting any text, clicking the bookmarklet performs the search.

javascript:(function(document) {
function se(d) {
    return d.selection ? d.selection.createRange(1).text : d.getSelection(1);
let d = se(document); 
for (i=0; i<frames.length && (d==document || d=='document'); i++) d = se(frames[i].document); 
if (d=='document') d = prompt('Enter%20search%20terms%20for%20Wikipedia',''); 
open('https://en.wikipedia.org' + (d ? '/w/index.php?title=Special:Search&search=' + encodeURIComponent(d) : '')).focus();


  1. ^ Jonathan Avila (2014-03-02). "How to create a favlet for accessibility testing".
  2. ^ Domain bookmarklets.com Archived 2009-07-07 at the Wayback Machine registered 9 April 1998
  3. ^ "Activating JavaScript Commands From the Personal Toolbar". What's New in JavaScript 1.2. Netscape Communications Corporation. 1997. Archived from the original on 2002-06-11.
  4. ^ Willison, Simon (April 10, 2004). "Email from Brendan Eich". SitePoint. Retrieved September 26, 2014.
  5. ^ "Bug 866522 - Bookmarklets affected by CSP".
  6. ^ "Bookmarklets are Dead". 23 October 2014.
  7. ^ "The Slow Death of Bookmarklets". 16 November 2012.
  8. ^ "The Resurrection of Bookmarklets".
  9. ^ Ruderman, Jesse. "Bookmarklets for Zapping Annoyances". Jesse's Bookmarklets Site. Retrieved 29 March 2013.
  10. ^ "YouTube Video Speed Bookmarklets". sgeos.github.io. 2017-10-29.
  11. ^ Kant, Kushal (23 August 2017). "How to Use Parameters in HTML5 Video Tags/Attributes". findnerd.
  12. ^ "HTML video Tag". www.w3schools.com.
  13. ^ Tested on Mozilla Firefox, Opera, Safari, and Chrome. Does not work in IE7 or IE8. Original source: Alex Boldt