skip to content
barorin&

ブックマークレットの作り方|要素の取得からコメントの落とし穴まで

/ 5 min read

Table of Contents

はじめに

ブックマークレットは、ブックマークに登録したJavaScriptを、開いているページ上で実行する仕組みです。拡張機能を入れるほどではない作業を自動化するのに向いています。

作り方と、実際にハマったところをまとめました。

デベロッパーツールで要素を探す

まず、操作したい要素をどう指定するかを決めます。Chromeで F12(または Ctrl + Shift + I)を押してデベロッパーツールを開き、Console タブで試すのが早いです。

// IDで探す
document.querySelectorAll("#id");
// クラスで探す
document.querySelectorAll(".class");
// タグで探す
document.querySelectorAll("tag");
// name属性で探す
document.querySelectorAll('input[name="name"]');
// 任意の属性で探す
document.querySelectorAll('[data-role="button"]');

querySelectorAll() はCSSセレクタをそのまま書けるので、CSSを書ける人なら覚え直すことはほとんどありません。

ブックマークレットにする

Consoleで動くことを確認したら、ブックマークに登録します。

  1. ブックマークを新規作成する
  2. 名前は任意
  3. URLjavascript: を先頭に付けたコードを貼り付ける
javascript:(function(){ alert(document.title); })();

即時実行関数で囲んでおくと、変数がページ側のスクリプトと衝突しません。

落とし穴:コメントアウトで動かなくなる

Consoleでは問題なく動くのに、ブックマークレットにすると次のエラーが出ることがあります。

Uncaught SyntaxError: Unexpected end of input

原因は、コードの中に書いた // によるコメントです。

ブックマークレットの実体はURLなので、**登録した時点でコードの改行がすべて無視され、1行になります。**その結果、// 以降にあるコードが最後まですべてコメントとして扱われ、閉じ括弧が消えて構文エラーになります。

// NG: このあとのコードがすべてコメント扱いになる
javascript: (function () {
// 処理を実行する
alert("hello");
})();

ブロックコメントを使えば解決します。

// OK: 範囲が閉じているので1行になっても影響しない
javascript: (function () {
/* 処理を実行する */ alert("hello");
})();

おわりに

ブックマークレットは、「Consoleで動いたコードをそのまま貼る」だけに見えて、1行になるという一点だけが違います。動かないときは、まずコメントとセミコロンを疑ってください。

この記事を書いた人

barorinのプロフィール画像

barorin公認会計士

会計とITの二足のわらじで働く公認会計士です。Pythonを中心に、会計・監査の実務で実際に使っているコードや、Ubuntu・Raspberry Piの設定メモを書いています。