html Javascript プログラミング

コンソールでは動くのにブックマークレットにすると動かないのは戻り値のせいだった

先日、ブックマークレットを作りました。

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(){コード})();

ブックマークレットの戻り値のことは、どうやら常識だったみたいなのですが、ぜんぜん知りませんでした。とほほ

-html, Javascript, プログラミング