
ブックマークレットとは、 Webブラウザに保存されるブックマークで、ブラウザに新機能を追加するJavaScriptコマンドが含まれています。ブックマークレットは、WebブラウザのブックマークのURLとして、またはWebページ上のハイパーリンクとして保存されます。ブックマークレットは通常、ユーザーがクリックしたときに実行される小さなJavaScriptコードです。クリックされると、選択したテキストから検索クエリを実行したり、テーブルからデータを抽出したりするなど、さまざまな操作を実行できます。
ブックマークレットの別名はfaveletまたはfavletで、お気に入り(ブックマークの同義語)に由来する。 [ 1 ]
bookmarklets.com の Steve Kangas は、 Netscapeの JavaScript ガイド [3] の提案に基づいて短いスクリプトを作成し始めたときに、bookmarklet [2] という言葉を作り出しました。それ以前に、Tantek Çelikはこれらのスクリプトをfaveletsと呼び、2001 年 9 月 6 日という早い時期にその言葉を使用していました (個人の電子メール)。Netscapeで JavaScript を開発したBrendan Eich は、ブックマークレットの起源について次のように説明しています。
そういう意味では、これらは意図的な機能でした。私は
javascript:1995 年に JavaScript とともに URL を発明し、javascript:URL がブックマーク可能など、他の種類の URL と同様に使用できることを意図していました。特に、例えば を読み込むことで新しいドキュメントを生成できるようにしましたjavascript:'hello, world'が、また (ブックマークレットの鍵となる)現在のドキュメントのDOMjavascript:alert(document.links[0].href)に対して任意のスクリプトを実行できるようにしました (例えば)。違いは、後者の種類の URL は JS で undefined 型に評価される式を使用していることです。Netscape 2 が出荷される前に JS に void 演算子を追加し、URL 内の undefined 以外の値を簡単に破棄できるようにしましたjavascript:。
—ブレンダン・アイヒ、サイモン・ウィリソンへの電子メールにて[ 4 ]
ウェブサイトにおけるコンテンツ セキュリティ ポリシー(CSP)の実装の増加により、ブックマークレットの実行と使用に問題が発生しました (2013 ~ 2015 年)。 [ 5 ]一部では、これがブックマークレットの終焉または死を告げるものだと示唆されています。[ 6 ] [ 7 ] William Donnelly は、この問題 (JavaScript ライブラリ コードの読み込み、参照、使用という特定の場合) に対する回避策を 2015 年初頭にGreasemonkeyユーザー スクリプト ( Firefox / Pale Moonブラウザ アドオン拡張機能) とシンプルなブックマークレット ユーザー スクリプト通信プロトコルを使用して作成しました。[ 8 ]これにより、(ライブラリ ベースの) ブックマークレットを、CSP を使用し https:// URI スキームを持つウェブサイトを含む、あらゆるウェブサイトで実行できるようになります。ただし、ブラウザが CSP を使用してインライン スクリプトの実行を無効化/禁止することをサポートするようになり、ウェブサイトがその機能を実装し始めると、この「修正」は「壊れる」ことになります。
ウェブブラウザは、タグの属性とブックマークにURIを使用します。や などのURIスキームは、一般的にプロトコルを指定し、文字列の残りの部分のフォーマットを決定します。ブラウザは、パーサーにとって他のURIと全く同じであるURIも実装しています。ブラウザは指定されたスキームを認識し、文字列の残りの部分をJavaScriptプログラムとして扱い、実行します。式の結果が存在する場合、それは元のページの代わりに表示される新しいページのHTMLソースコードとして扱われます。href<a>httpftpjavascript:javascript
実行中のスクリプトは現在のページにアクセスでき、その内容を検査したり変更したりできます。スクリプトが未定義の型(例えば文字列ではなく)を返した場合、ブラウザは新しいページを読み込みません。その結果、スクリプトは現在のページの内容に対して実行されます。これにより、ページを再読み込みすることなく、フォントサイズや色などの変更をその場で行うことができます。
値を返さない即時呼び出し関数、またはvoid演算子が前に付いた式は、ブラウザが評価結果をHTMLマークアップの断片として解析しようとするのを防ぎます。
javascript : ( function (){//未定義でない型を返すステートメント(例:代入)})();ブックマークレットは通常のブックマークと同様に保存および使用されます。そのため、ブラウザに機能を追加するシンプルな「ワンクリック」ツールと言えます。例えば、以下のようなことが可能です。
ブックマークレットのインストールは、通常のブックマークの追加と同じ手順で行います。唯一の違いは、URLの宛先フィールドの代わりに、`<script>`で始まるJavaScriptコードを入力する点ですjavascript:。ブックマークレットを作成したら、クリックすることで実行できます。