■ 見てるページを全部 Google Bookmarks に登録する Greasemonkey スクリプト作った
フッと思い付いたで、作りたくなった。そして作ってみた。こんなに Google にデータを送信しまくるのは気が引けるけど、意外とおもしろい。気が引けない勇者はどうぞ使って下さい。
フォームと IFRAME を作って、IFRAME にフォームの内容を送信して、最後に両方削除してるっていうだけです。XMLHttpRequest だと Google でのクッキーの扱いとか面倒そうだったのでこうしました。ていうか、これ、CSRF の脆弱性があるって事なんだよね。だからそのうち上記のスクリプトは利用出来なくなるような気がする。
で、登録する処理だけなら簡単に出来たんだけど、細かい所で意外に苦労した点が多かったので、そこら辺まとめてみました。
* フレームのページが余分に登録されてしまう
はてな質問のコメント欄 を参考にして (self.location.href!=top.location.href) の場合に処理を中止するようにすると、フレームや IFRAME のページでの処理を排除する事が出来ます。
IFRAME を使ってるページがあると、IFRAME の内容までも登録されてしまう。IFRAME を使って広告を配信しているサイトとか多いので結構邪魔。フレームを使ったページも、全部のページが登録されてしまう。どうしても IFRAME とフレームの両方を除外する処理を作る事が出来なかったので、top.location.href が空の場合に処理を飛ばすようにしました。これだと、IFRAME のページが登録されなくなる。
* IFRAME を removeChild すると読み込み中のままになる
フォーム送信後に隠しIFRAMEを削除すると、ページが読み込み中のままになってしまう現象が発生する。removeChild するタイミングを setTimeout を使って1テンポ遅らせたら発生しなくなった。
* ページの文字コードが UTF-8 以外だとタイトルが文字化けする
一番苦労した所。Google Bookmarks 側では文字コードの判別とかはやっていないようで、EUC-JP のページからフォームを送信すると、日本語が EUC-JP のまま登録されてしまって文字化けしてしまう。フォームに Accept-charset="UTF-8" を付けたら化けなくなった。
最後になりましたが、閲覧履歴を保存して検索とかってのを真面目にやりたいなら、風博士 を使ったり、プロキシサーバを使った全文検索 とかをやったりした方が良いです。
Posted by Kyosuke Takayama at 2006-04-04 (Tue) 17:16 printable version