先日、ブックマークレットを作りました。
Chromeのコンソールで動いたので、1行にまとめてから先頭にjavascript:を付けてブックマークレットに登録しました。
ところが動きません。画面が真っ白になってしまいます。
動かないブックマークレットはこんな感じでした。
私がよく見るWebサイトのヘッダーが大きくて見づらいのでちょっと消えていただくための単純なコードです。
javascript:document.getElementById("header").style.display ="none";
調べてみると、ブックマークレットは最後の処理にundefined以外の戻り値があるとページ遷移が発生してしまうらしいです。
上記のコードでは"none"が戻り値となります。
コンソールで実行する場合にはコンソール上に戻り値が表示されるだけでページ遷移は起きないため、問題ないみたいです。
これを避けるために最後にvoid(0);を付けると無事に動きました。
javascript:document.getElementById("header").style.display ="none";void(0);
ただし、void(0)を使うよりも即時関数で囲む方がいいみたいです。本体とブックマークレット間での変数名のバッティングも避けられます。
javascript:(function(){コード})();
ブックマークレットの戻り値のことは、どうやら常識だったみたいなのですが、ぜんぜん知りませんでした。とほほ