今見ているページの Archive.org や Google Cache を一発で開くブックマークレット
Cached View というウェブサイトを見付けて触発された。
URL を入力してボタンを押すと、「Archive.org」か「Google Web Cache」のいずれかでキャッシュされたページが見られる、というモノ。
コレが大変便利だったので、なんとかブックマークレットにできないかなぁと思ってやってみた。
目次
- 実は簡単な仕組みだった
- 今見ているページを Archive.org か Google Cache で開くブックマークレット
- 現在のページを Archive.org で開く
- 現在のページを Google Cache で開く
- URL を入力して Archive.org か Google Cache で開く
- URL を入力して Archive.org を開く
- URL を入力して Google Cache を開く
window.open()
を連続で2回呼べず
実は簡単な仕組みだった
よくよく Cached View の実装を調べてみたけど中身は簡単で、
- Archive.org の場合は
http://web.archive.org/web/*/
- Google Cache の場合は
http://webcache.googleusercontent.com/search?q=cache:
という URL の後ろに、指定の URL を繋げて書けば良いだけだった。
メインサイト Neo's World の例でいけば、
- Archive.org : http://web.archive.org/web/*/http://neo.s21.xrea.com/
- Google Cache : http://webcache.googleusercontent.com/search?q=cache:http://neo.s21.xrea.com/
コレでキャッシュされたページに飛べる。
今見ているページを Archive.org か Google Cache で開くブックマークレット
ということで、今見ているページを Archive.org か Google Cache のいずれかで開くブックマークレットを作ってみた。
javascript:(u=>{u=confirm('OK : Archive.org\nCancel : GoogleCache')?'web.archive.org/web/*/':'webcache.googleusercontent.com/search?q=cache:';open('http://'+u+location.href,'_blank')})();
コレをブックマークしてもらえればと。
少し整形すると、こんな関数。
const serviceUrl = window.confirm('OK : Archive.org\nCancel : GoogleCache') ? 'web.archive.org/web/*/' : 'webcache.googleusercontent.com/search?q=cache:';
window.open('http://' + serviceUrl + location.href, '_blank');
window.confirm()
を利用して、「OK」ボタンが押されたら Archive.org、「キャンセル」ボタンが押されたら Google Cache で開くように設定した。
現在のページを Archive.org で開く
以降はこのブックマークレットをベースにした機能別のブックマークレット集。まずは Archive.org のみ開く版。
javascript:(x=>open('http://web.archive.org/web/*/'+location.href,'_blank'))();
javascript:open('http://web.archive.org/web/*/'+location.href,'_blank');
どっちでも OK。
現在のページを Google Cache で開く
Google Cache でサクッと開きたいだけならコチラ。
javascript:(x=>open('http://webcache.googleusercontent.com/search?q=cache:'+location.href,'_blank'))();
javascript:open('http://webcache.googleusercontent.com/search?q=cache:'+location.href,'_blank');
URL を入力して Archive.org か Google Cache で開く
ココまでのブックマークレットは location.href
を見ていたが、対象の URL が既に消滅していると、サーバによっては別ページにリダイレクトされてしまったりして、正確なキャッシュページを開きづらかったりする。
そこで、window.prompt()
を使って URL を入力してもらい、その後 window.confirm()
でどちらのサービスで開くかを選択させる、というブックマークレットも用意した。コレなら任意のページを開ける。
javascript:((u,s)=>{u=prompt('Enter the URL');if(!u)return;s=confirm('OK : Archive.org\nCancel : GoogleCache')?'web.archive.org/web/*/':'webcache.googleusercontent.com/search?q=cache:';open('http://'+s+u,'_blank')})();
URL を入力して Archive.org を開く
Archive.org でのみ開ければ良いならコチラ。
javascript:(u=>{u=prompt('Enter the URL to open Archive.org');u&&open('http://web.archive.org/web/*/'+u,'_blank')})();
URL を入力して Google Cache を開く
Google Cache だけで開ければ良いならコチラ。
javascript:(u=>{u=prompt('Enter the URL to open GoogleCache');u&&open('http://webcache.googleusercontent.com/search?q=cache:'+u,'_blank')})();
window.open()
を連続で2回呼べず
今回、window.open(targetUrl, '_blank')
という書き方で、別タブにキャッシュページを開かせるようにしたが、コレを2回呼べれば、Archive.org と Google Cache の両方を同時に開けるかな、と思ってやってみた。
結論からいくと、先に呼んだ window.open()
の方しか開かれず、後に書いた方は実行されなかった。第2引数をウィンドウ名として利用するので同じ値だと上手く処理できない、とかいう文献もあったが、これらの情報は多分タブ機能がない頃の古い IE を前提とした挙動かなと思う。
window.open()
の呼び出しを関数化して、console.log()
を同時に実行させてみたが、console.log()
の方は2つとも実行された。ということは、window.open()
を実行する瞬間、そのタブがアクティブになっていないといけないのかな、と推測。ちなみに setTimeout()
や Promise での遅延実行も変わらず。今回は断念。
とりあえず、サクッとキャッシュがないか見たければ「Google Cache」、それで上手く拾えなければ Archive.org を呼ぶ、みたいな感じで使う運用にしようかな、と。