2010年5月6日木曜日

[Greasemonkey] YouTube ダウンロードリンク表示スクリプトを改良しました

以前、間に合わせで書いたスクリプトなんですが、ファイル名にタイトルが自動的に入るようにしました。コピペする手間やファイル名として使えない文字を気にする必要が無くなったので、個人的には気に入ってます。いつもと同様GitHubに上げておりますので、人柱上等な方はこちらからどうぞ。youtube_adddownloadlinks.user.js

リンクをクリックするだけでセーブが行われます。これまでの「右クリック→別名でリンク先を保存」だとタイトルがファイル名に入らないので注意して下さい。なお、ファイル名として利用出来ない文字はアンダースコア(_)に変換されます。

以下、技術面に関していくつか
  • このハックは基本的に、ダウンロードを本来のダウンロード処理ではなくXMLHttpRequestを自前で発行する事で処理し、その上でdocument.location.hrefを捏造する事でセーブ時のファイル名を変更するというものです。
  • どういうわけか、GM_xmlhttpRequestでないと、この挙動を引き出せないようで、new XMLHttpRequest()で作成したリクエストでは駄目でした。このことからも想像が付きますがSafari+GreaseKitでは残念ながら上手く動作しません。
  • readyState==2|3の場合は一旦abort()を呼んでいますが、これはreadyState==4だけを待つようにすると、ダウンロードが完了するまでずっと待たされるハメになるからです。当たり前といえば当たり前なのですが、最初、onloadで処理してハマってしまいましたので、老婆心ながら一応。

0 件のコメント:

コメントを投稿