はてなブックマークに登録するブックマークレット

はてなブックマークを簡単に行うブックマークレットが、公式で紹介されている。しかし iPhone Safari で上手く動かなかったので調べてみた。

上のページで紹介されているブックマークレットを読み解くと、次のスクリプトを読み込んでいる。

中身はこのようなコードだ。

(function() {
    var baseURL = 'https://b.hatena.ne.jp';
    var url = baseURL + '/my/add.confirm?url=' + encodeURIComponent(location.href);
    window.open(url, '_blank').focus();
})();

なるほど、だったらこのコードを直接ブックマークレットとして動かせば良いな。同様のことを考えている方も既にいた。

window.open() だと上手く動かない場合もあるので、location.href を書き換えるバージョンも用意してみた。

// `window.open()` バージョン
javascript:(o=>o('https://b.hatena.ne.jp/my/add.confirm?url='+encodeURIComponent(location.href)))(u=>window.open(u,'_blank',''));

// `location.href` バージョン
javascript:(o=>o('https://b.hatena.ne.jp/my/add.confirm?url='+encodeURIComponent(location.href)))(u=>location.href=u);

o という仮引数でページ遷移の関数を組み立てている。open 的な意味合い。

const open = (url) => { window.open(url, '_blank', ''); };
const open = (url) => { location.href = url; };

このいずれかの関数を Minify して渡している。o() 関数を実行するだけの本体部分はそのままに、引数部分で定義した関数を差し替えるだけで、window.open() を使うか location.href を使うか調整できるようなコードにしてみた。