2007/11/27

Shared stuffのサイト・サムネイル

Profile pageと同様に、独立した画像として呼び出せます。勝手に使ったら怒られますかね?

http://base.googlehosted.com/base_media[?{options}] 全省略=90x90の"Image not available" q={escaped image url} dhm={?} size={n}
  1. size= 1(400x400)"Image not available"
  2. size= 2( 90x 90)デフォ
  3. size= 3(120x120)
  4. size= 4(220x200)
  5. size= 5( 60x 60)
  6. size= 6(400x400)
  7. size= 7( 60x 60)"Image not available"
  8. size= 8( 60x 60)7と同じ
  9. size= 9( 80x 98)
  10. size=10(120x 90)
  11. size=11(300x300)
  12. size=12( 40x 40)
  13. size=13( 40x 30)
  14. size=14( 90x 90)以降2と同じ

Google Gearsページのサムネイルについて適当に調べた限りではこんな感じになっています。
画像は元々のサイトにある物(image urlの部分)をキャッシュしてサイズだけ変えている様です。dhmは良くあるハッシュの様なアルファベットの羅列で意味はわかりません。

サイト内検索結果

ちょっとGearsについて調べていたらGoogle Code Blogにぶち当たりました。開いた先がトップページだったのでサイト内検索したところ、タブ表示に。

サイト内検索って、全然使ったことが無かったのですが、こういう実装がスタンダードなんでしょうか?よく出来てますねぇ。そういえばすっかり聞かなくなった"Related link"に似ていますがアレは何処にいったんでしょう。

2007/11/26

Google Profile page

MapsとShared stuffはインラインフレームで共通のprofileページが表示されます。user idもこの二つは同一みたいです。

他にReaderのシェアページ、BloggerのユーザID、BloggerのBlogID、ノートブックのシェアページなどIDらしきものが振られていますが一致しませんね。

http://maps.google.com/maps/c/widgets/ProfileViewer?uid={user id}[&others] http://www.google.com/s2/widgets/ProfileViewer?uid={user id}[&others]

widgets/以下は同じですが、それより上は違います。

URLオプションで多少見た目もいじくれるこのページ、適当にインラインフレームでBloggerやPageCreaterに使っても良いんでしょうか。

2007/11/25

Google shared stuff

ヘルプページ
http://www.google.com/s2/sharing/resources/static/html/help.html
ヘルプページのスクリーンショットと私の端末で表示されるページは若干違います(Xxx has shared n items via…の部分がありません)。すでに細部でマイナーチェンジしてるのでしょうか?
sharedしたstuffが勝手に消えている事がある。
昨日sharedしたstuffが幾つか消えています。とくに如何わしいサイトでもなかったんですが。Report spam的な通報システムが変に働いたんでしょうか。またmixiでマイミクが0人で長期放置するとアカウント削除の様に、[view]が1のままだと一定期間で削除などのルールがあるのでしょうか。
まだ、全てのブックマークを預けるにはちょっと信頼性に欠くようです。
自分のページより知り合いのshared一覧が優先?
URLオプション無しのページに行くとGmailのコンタクトリストに追加されている他人のshared一覧が表示されます。del.icio.us/network見たいな物ですが、優先順位がdel.icio.usとは逆の様です。
  • del.icio.usは自分のブックマークがデフォルトで、知り合いはnetworkというサブページ
  • Shared stuffは"Updates from others"がデフォルトで、自分は"My Updates"というサブページ
コンタクトリストに追加する場合はエイリアス付きでOK
例えばhoge@gmail.comさんのsharedを購読したい場合、hoge+huga@gmail.comというアドレスをコンタクトリストに追加しても"Updates from others"ページにちゃんと表示されます。
メールをするような知り合いではないけど、この人のsharedを見たいなという場合(del.icio.us/network的な使い方)、hoge+sharedstuff@gmail.comなど適当なエイリアスで分類できますね。
自分が誰に見られているか判らない
コンタクトリストの追加はNotebookの共有などのように通知が行かないので、相手に断りなく幾らでも追加できてしまいます。del.icio.us/networkの場合、[your fans]という場所に自分のブックマークの閲覧相手が見えるのですが、Shared stuffでは今のところ確認できませんでした。
また、Shared時のポップアップに[publicly visible]という表示がありますが、"hidden"などの選択肢はないため、今のところ見られる側に拒否権は無いようです。メアドが知られれば誰でも"Updates from others"ページに追加できてしまいます。
コンタクトリストから消してもUpdates from othersからは消えない?
  1. AさんがBさんをコンタクトリストに追加
  2. BさんがShared stuffにページを追加
  3. AさんがBさんをコンタクトリストから削除
  4. AさんのUpdates from othersにBさんのShared stuffが表示される
コンタクトリストに在籍中にBさんが[Remove this item]したstuffはAさんの"Updates from others"ページからも消えます。
自分は"Updates from others"ページには入らない
自分のコンタクトリストに自分のメアドを登録しても、"Updates from others"ページに自分のshared stuffは表示されません。自分のshared stuffも知り合いのshared stuffもごった煮にして時系列で並べたい場合は他の手段を利用する必要がありそうです。

2007/11/24

Google shared stuff

全然情報がないですね。URLオプションとか、検索用のフォームとかあるかと思ったんですが。食指が動かないのでしょうか。

前回間違えていたっぽいのは[view]項目はshared数ではなく、Shared stuff経由で参照された数っぽいです。ただ、フィードから参照する場合、直リンクなのでその辺どう追跡するのか、viewの実数が本当に参照数なのかもわからないのでなんともいえません。

http://www.google.com/s2/sharing/stuff?lmode=globalにアクセスすると"Top shared stuff"が見られます。今現在は上位ページはポルノサイトだらけです。

URLオプションもちょっといじった限りでは全然わかりません。収穫はJSONフィードが取れたくらい。

lmode = "global" output = "rss" | "json" user = {user id} tag = {tag name}

user + tagは可能(指定ユーザの指定タグ)
ex) ?user={user id}&tag={tag name}

userを複数指定すると最後に指定したものだけが有効になる
ex) ?user={user1 id}&user={user2 id}
-> user2のページが表示される

tagを複数指定すると最後に指定したものだけが有効になる
ex) ?tag={tag1 name}&tag={tag2 name}
->tag2の検索結果が表示される

複数タグのアンド検索などは出来ませんでした &tag={tag1 name}&{tag2 name} &tag={tag1 name},{tag2 name} &tag={tag1 name}+{tag2 name} などどれもだめ。(記号そのまま、エスケープ共に)

lmodeにはglobal以外何を入れても("private", "local", "hoge"etc)全部"global"と同じ結果でした。

Google shared stuff

Shared stuff from people you know

ヘルプと関連ブログは敢えて見ずに第一印象。


Googleなのに検索窓が無い。のは突っ込んだら負け
タグ名のリンクをクリックすると同じタグの付いたものは見れます。
気になるタグは自分で一度つけるかurl直打ち編集。
削除は出来るが編集不可
[Remove this item]リンクはありますが、編集する場合は、そのページをもう一回開いてSharedブックマークレットをもう一回実行する必要が。
タグ入力欄に、過去に付けたタグの補完機能が無かったり。気が付いたらどんどん改良されてる系でしょうか。
コメントの後ろにsharedしたユーザ名が出ますが、過去にsharedしたstuffはプロフィールを変更しても反映されません。これは仕様ぽい気もしますが。
faviconが無いのが仕様ではない事を希望します(勝手にブックマークレット用の画像を転用しています)
リアルタイム性が強い?
フィードをはいたりしているので、Google Bookmarkよりdel.icio.usの代替にしようかと思います。
  1. 目に付いたらShared Stuffに突っ込む。
  2. 永続的に残したいものは分類してGoogle Bookmark
  3. 最初から目的を持って集めたのはNotebook
という使い分けだと、「Notebookに入れると同時にSharedされる」ブックマークレットとかあると便利かも。
利用者がまだ少ない
各stuff(という表現でいいのでしょうか)には他にsharedした人数が表示されます。みんなとりあえずやりそうなもんですが、Shared Stuffページ自体のSharedすら現在228,913件。"favicon"タグを付けたほかのstuffは見つかりませんでした。"Google"というタグですら、数時間前に自分がsharedしたShared Stuffページが上位に表示されます。
自分のstuffが上に表示される、とか、時系列じゃない、などの勘違いでなければ(特に日本語圏の)人数増加のブレイクスルーは当分先でしょうか。

2007/10/07

最近貼られたラベルのリスト

ラベルリストを表示するウィジェットはデフォルトで用意されていますが、「貼られた回数順」か「あいうえお順」しか選択肢がありません。

しかし、例えば具体的なサービス名や作品名などの固有名詞をラベルにしている場合、ここ半年言及していないのに"A"で始まるからという理由で"Amazon"のタグが一番上に表示されていても大した役に立ちません。流行物を追いかけているブログほどラベルリストが役立たずになってしまいます。

そこでBloggerのサイトフィード機能の一つ、JSONフィード出力機能を使って「直近のエントリーに貼られたラベルリストを抜き出して表示する」というのをやってみました。

1:RecentoryLabels = { 2:"labels" : {}, 3: // labelsオブジェクトに未登録のラベルを追加 4:"init" : function(_aJsonData) { 5: 6: // JSONフィードからエントリー配列(root.feed.entory)を取得 7: var entrys = _aJsonData["feed"]["entry"]; 8: 9: // 各エントリーのラベル配列(entory.category)を取得 10: for (i in entrys) { 11: var updated = entrys[i]["updated"]["$t"]; 12: var categorys = entrys[i]["category"]; 13: for (j in categorys) { 14: // JSONフィード自体が更新日の降順でソートされているので、 15: // 既に登録されている=そっちの方が新しい 16: if (!(categorys[j]["term"] in this.labels)) { 17: // 更新時間のマッピングは特に意味なし 18: this.labels[categorys[j]["term"]] = updated; 19: } 20: } 21: } 22: this.disp(); 23: }, 24:"disp" : function() { 25: // 出力用にlabelsオブジェクトを配列に 26: var s = []; 27: for(i in this.labels) s.push(i); 28: 29: // "recentory_labels"というDIVかなんかを用意しておく。 30: if (out = document.getElementById("recentory_labels")) { 31: // カンマ区切りで表示 32: out.innerHTML = s.join(", "); 33: } 34: } 35:} 1:<body> 2: <div id="recentory_labels"></div> 3: <script src="http://knyijong.blogspot.com/feeds/posts/default?orderby=updated&alt=json-in-script&callback=RecentoryLabels.init"></script> 4:</body>

"RecentoryLabels.init"をコールバック関数に指定してJSONフィードを呼びます。disp中のgetElementByIdがnullを返さないように、JSONフィードの呼び出しは出力する場所より後に書く必要があるみたいです。

実際にはJavaScriptの32行目辺りをいじってラベル名をクリックしたらラベル別ページに飛ぶ、といったAタグを入れる予定ですが、メンドイので導入は気が向いたら。

出来ればクライアント(JavaScript)じゃなくてサーバサイドでやりたいですが、Yahoo Pipesでも使わないと無理でしょうか。

出力イメージです。このエントリー直前までのこのブログのラベルを「最近貼られた順」に240px幅の枠にクラウドっぽく表示した図。

2007/07/29

Google Readerのヘッダ非表示

@namespace url(http://www.w3.org/1999/xhtml); @-moz-document url("https://www.google.com/reader/view/") { #global-info { display : none !important; } #logo-container { display : none !important; } }

Firebugで適当にいじってStylishで適用しています。

探せば幾らでもありそうですが、Firebug使う口実が欲しかったので自作です。

2007/07/26

microSDのアイコン

microSD icon

意外とないので自作。DotWorkというエディタを使用させていただきました。

PRD-MSD3なんかを使ってmicroSDを挿したときのドライブアイコンが欲しかったのです。

アイコンの指定はメディアのルートフォルダにautorun.infというテキストファイルを作って、以下の記述。アイコンファイルはautorun.infと同じ場所においてあります。LABEL指定はおまけです。

[autorun] ICON=microsd.ico LABEL=MicroSD 2GB

こんな感じになります。

USBマークの正確な規格などは当然知りませんので適当です。

2007/07/25

読込み中止はEsc

Firefoxでページの読込み中止はEscキー。

ブラウザの基本的なボタン

  • 戻る(Alt+Left)
  • 進む(Alt+Right)
  • 中止
  • 更新(F5, Ctrl+R)
  • home(Alt+home)

はショートカットキーで代替できるので消していたのですが、中止ボタンだけはとっさの時に押せないと困るので残していました。

が、別の用件でkeyconfigの設定画面を眺めていたら、中止がEscに割り当てられているのに気づく。これで全部のボタンを排除できました。

キー割り当てを変更する気がなくても、keyconfigは入れておいて損はないアドオンだと思います。

2007/07/23

Google Readerのサイドバーをトグル

Google Readerのサイドバーは"u"キー押下でトグルできるのですが、マウスでトグルする方法がない。Google Mapsの様に左矢印をクリックでマップの表示領域を最大化、とかしたいのです。

"u"キー押下時に呼んでいるイベントを呼べばいいのかと思ったんですが、探し方がわからず。

HTML眺めていたら、トグル時にBODYタグのclassが変わるようなのです

  • サイドバー表示時
    class="mozilla loaded"
  • サイドバー非表示時
    class="mozilla loaded hide-nav"

直接class属性いじればいいのかな?っていうことで以下のコードを流してみたら思いのほか想定どおりに動いてくれました。

// 非表示->表示にするテスト // classから"hide-nav"を消す (function(){ var b=document.getElementsByTagName("body")[0]; var x=b.getAttribute("class").split(" "); x.pop(); b.setAttribute("class",x.join(" ")); })()

あとはリストの上に表示されている"All items"等に"chrome-stream-title"というIDが振られているので、onclickイベントでも追加すればいいのかな?

何で実装しようか。

しかしFirebug便利ですね。これを書いている途中に気が付いたのですが、コンソールからコード投げなくても、直接class属性値もいじれたのかorz

2007/07/16

Firefoxの再起動ショートカットキー

【Firefox&Thunderbird拡張】 Custom Buttons を試してみた。

こちらで紹介されているFirefoxの再起動用ボタンのスクリプトをkeyconfigに追加してみたところそのまま動きました。試していませんが、多分Mouse Gesturesなどのアドオンでも動くのではないでしょうか?

Firefoxの起動時にホームページを表示する設定にしているが、たまに(config設定時やアドオンの設定変更後に)タブの状態を残したまま再起動したいときなど便利です。

Alt+F4が終了なのでShift+F4を再起動にしました。本当はShift+Alt+F4にしたかったのですが、keyconfigにうまく登録できず。

以下がコードの抜粋です。1~2行目のコメントを外すと確認ダイアログが出るようです。試してませんが。

//var confirmRestart = window.confirm('Are you sure you want to restart firefox?'); //if(!confirmRestart) return; var appStartup = Components.interfaces.nsIAppStartup; // if (canQuitApplication()) // uncomment if using zeniko's Session Manager Components.classes["@mozilla.org/toolkit/app-startup;1"] .getService(appStartup).quit(appStartup.eRestart | appStartup.eAttemptQuit);

2007/06/30

スクラッチパッドのバックアップ

Google デスクトップのスクラッチパッド(簡易メモ機能)というウィジェット(ガジェット?)のバックアップファイルのありか。

C:\Documents and Settings\{user name}\Local Settings\Application Data\Google\Google Desktop\{profile folder?}

の下にある scratchpad.txt

バックアップは scratchpad-{yyyymmdd}-{hhmmss}.txt

バージョンアップした時に消えて困ってたんですが残っていた様です。

ヘルプ センター: スクラッチ パッドやタスク リストの失ったデータを復旧するにはどうすればよいですか。

つっこみ

「ソレ違うだろ」と突っ込みたくなるページをクリップする時に「つっこみ」というタグをつけようと思ったのですが、英語しかサポートされないサービスがあるので、「つっこみ」を和英辞書で引いてみました。

つっこみ = feed

困った。RSSやAtomやpodcastに関するページも全部「つっこみ」になってしまう。

Docs & Spreadsheetsのフォルダはフォルダじゃない

各所でDocsのインタフェース更新に触れ、「タグがフォルダになった」と説明されている。けれどアレは単にフォルダの様な、もっと言えばWindowsのエクスプローラの様な見た目にしただけで、タグとしての機能は健在です。

タグとフォルダによる分類の最も大きな違いは同時に複数のタグ/フォルダに分類できるかどうか、だけど、Docsでは既にフォルダ(とみなされているもの)に入っていても[フォルダに追加]から別のフォルダを選べば同時に2箇所以上のフォルダに分類可能で、これはまさにタグ。

わかっている人はわかっていて敢えて「フォルダになった」と書いているのだろうけど、わからない人がこれを読むとますますわからなくなる。

同じ誤解がGmailでもされています。Gmailの基本的な分類

  • [受信トレイ]
  • [スターあり]
  • [チャット]
  • [送信済みメール]
  • [下書き]など

これらの分類をフォルダと勘違いしている人が居る。

以前、知り合いにGmailで「自分の送信したメール(送信済みメール)も返事があるまで受信トレイに入れたい」という質問をされた時、私は「[受信トレイに移動]を選べば出来るよ」と答えた。すると知り合いは「移動したいわけじゃなくて、送信済みメールにも残したい」といった追加要望を述べてきたのです。このことから知り合いがGmailの基本分類をフォルダと勘違いしていたのが伺えます。

やってみればわかりますが、[送信済みメール]で[受信トレイに移動]を選んでも[送信済みメール]に残ったまま、[受信トレイ]にも入ります。

Gmailでの[受信トレイに移動]は操作の内容をわかり易くするためのウソで実際に移動しているわけではないのです。正確には[ラベルを付ける:受信トレイ」に等しい。

ぶっちゃけ[下書き]にある下書き中のメールだって[下書き]に入れたまま[受信トレイに移動]を選べば[受信トレイ]に入れられます。解除するには[アーカイブ]。

なので正確には

  • [受信トレイに移動]=[ラベルを付ける:受信トレイ]
  • [アーカイブ]=[ラベルを削除:受信トレイ]

これらはGmailにメール管理ツールとして基本的な機能を提供するための特殊なタグ(*1)に過ぎません。

話しは飛びますが、現在のタギング可能なサービスに対する不満としてこちらの方に私も賛成です。

フォルダとタグ ≪ u-ch
  • 『フォルダ式』分類ではフォルダの下にフォルダもファイルも入れられる。
  • 『タグ式』分類ではタグの下にはファイルしか入れられない。

タグにタギングしたいです。

*1 Gmailでは正確には『ラベル』ですね

2007/06/24

FirefoxのConfig

Firefoxのカスタマイズを紹介したい時、本来の目的は機能の紹介のはずです。が、カスタマイズの紹介をするたびにabout:configの説明から入っているとエントリーが無駄に長くなる上に本題がぼやけます。

「about:configだ、いやpref.jsだ、いやuser.jsだ、prefs.jsが置いてあるのはここだ」といった点はそれほど重要ではないはずです。せっかくリンクの張れるWebなので、よくまとまったサイトにリンクを一つ張らせてもらって済むのならその方がすっきりすると思います。

と、思ったんですが、そこにフォーカスして綺麗にまとめられたページってあまり数がないですね。

一番綺麗にまとまっていたのがこちら。

about:config と user.js による Firefox のカスタマイズ - えむもじら

2007/06/20

Firefoxのポータブル化、と複数Profileの多重起動

FirefoxにはProfileを指定して開くコマンドラインオプションがあります。これで指定すればPortable Firefox無しでポータブル化できるみたいです。

Firefox をリムーバブルメディアから起動する - Firefox Help: 便利な使い方

利点
Portable Firefoxの起動時のスプラッシュが邪魔な人、英語版の日本語化とかしたくない人、FirefoxPortable.exeとか挟まれるのがむずがゆい人にはいいかも
欠点
むしろ手間はかかる。またポータブルに最適化はされていません。自分でabout:configなどを要設定。

普段から常にこの方法で使っていればProfileのバックアップも楽になるので、変な拡張を入れてしまった場合のバックアップなんかもとりやすくなるかもしれません。

ついでにMOZ_NO_REMOTEという環境変数をセットすると多重起動もできるようになります。

朝顔日記 - 続・複数の異なる Firefox を同時起動する

なにが便利かと言うと、Profile指定と一緒に使うと同じサービスに違うアカウントでログインしたFirefoxを同時に立ち上げられることです。(Cookieなどの実体がProfile単位で保存されるため?)

例えば私は、BloggerのアカウントがGoogleアカウントに統合されて以来、本名アカウントでネットをしている最中にBloggerに投稿したくなったらハンドルネームアカウントでログインしなおしていたのです。これが面倒くさいのでハンドルアカウントはOperaで使うようにしていました。が、複数のブラウザを等しく使い込むのは面倒です。出来れば同じFirefoxの方がいい。などといった場合に、本名アカウントとハンドルアカウントのFirefoxを同時に立ち上げられて便利です。ProfileをコピーしてからGoogleへのログインだけしなおせばアドオンやテーマの設定などを1からしなくても良くなります。

というわけで手順です(Win用)

  1. Firefox本体のコピー
  2. Profile指定及び多重起動用のBATを作成
  3. 今使っているProfileのコピー
  4. コピーしたProfileで起動するショートカットを作成

最後の手順はショートカットでもBATでもいいのですが、相対パス指定できるポータブルなランチャーなんかでも便利です。

今回はUSBで使うことが前提なのでUSBドライブ(仮にX:\)に以下のようなフォルダを用意します。

Firefoxのインストールフォルダ
X:\usr\local\opt\Mozilla\Firefox\
Profile設置フォルダ
X:\home\KNYI Jong\.mozilla\Firefox\
  1. Firefoxのコピー
    C:\Program Files等の下に元々インストールされているFirefoxのファイルをX:\usr\local\opt\Mozilla\Firefox\にごそっとコピーします。アンインストーラーなどUSB使用に不要なものもあるので容量が気になる場合は適宜削除してください。
  2. Profile指定及び多重起動用のBATを作成
    コピーしたFirefox.exeの横に以下の内容のfirefox.batというファイルを作ります。 @echo off SET BASE=%~dp0 SET MOZ_NO_REMOTE=true start "duplicate firefox" %BASE%\firefox.exe -profile %1 "%~dp0"というのはDOSのBATの特殊な環境変数(?)でBATファイルの置いてあるフォルダのパスです。BATの実行パスはショートカットから起動された場合などはファイルプロパティの「作業フォルダ」に依存します。この書き方だとどこから呼び出されようと、BATの設置場所からの相対パスで参照されます(多分)。なのでこのように書くことで呼び出される際の環境に依存せずにfirefox.exeを参照できるようにしています。
  3. 今使っているProfileのコピー
    C:\Documents and Settings等の下にあるProfileフォルダ(xxx.default等)の中身をごそっとX:\home\KNYI Jong\.mozilla\Firefox\にコピーします。
  4. コピーしたProfileで起動するショートカットを作成
    X:\usr\local\opt\Mozilla\Firefox\firefox.bat "X:\home\KNYI Jong\.mozilla\Firefox" という形式で、BATなりショートカットなりランチャーの登録なりで作って呼び出します。

実際のところ職場でもいつもの環境でFirefoxを使えるようにしたかったのですが、諸事情によりまだ試せていません。フツーのFirefoxがインストールされた自宅PCで複数アカウントの使い分けのために使っているので、この方法により本当にちゃんとポータブル化されているか(レジストリとかにゴミが残らない、USBから問題なく起動する、など)は未検証です。

2007/06/18

Google デスクトップのタイムライン

たまたま表示してみたところカレンダーのFrom部分が自分の誕生年月でした。

「生まれる前にはネットしてないよね?」という気の利かせ方なんでしょうか。たまたま一致しただけなんでしょうか。(Googleの何かしらのアカウントに誕生日を入れていた?)

2x年前じゃGoogleはおろかWWWも無い時代ですよ。当時のインデックスが今見られたら面白いですけどね。

2007/06/16

pitfall(落とし穴) hack

  • 実は意味がなかったり。
  • 実は他人に迷惑がかかっていたり。
  • 実はやばい情報が漏れていたり。

想定外の落とし穴があるハックなどをたまに目にします。

この手のハックに対する注意喚起は「有用なハックを解説するエントリー」のおまけ的に書かれていて、重要視されていなかったり、見過ごされて気づかなかったり、という事も多いように見受けられます。

なので、「ついでに」書くのではなくそれだけを取り上げたエントリーというのも必要なのではないかなと、考えたりした次第ですが、こういったハックに対する業界標準的な呼び方が見つからなかったのでとりあえず"pitfall hack"(落とし穴のあるハック)というラベルを付ける事にしました。

バッド(良くない)ハックというのも考えたのですが、良いか悪いかは使う場所や目的によっても変わってきます。 ハラスメント(迷惑)ハックというのも考えたのですが、これも受け取り手によって違いますしね。

2007/05/26

Gmailで下書き中の添付ファイル合計

を、取得するためのブックマークレット

javascript: (function(){ var f=window.frames[0]; var ifr=f.document.getElementById('v1').contentWindow; var alist=ifr.document.getElementsByTagName('a'); var atchs=0; for(i=0;i<alist.length;i++){ if(alist[i].getAttribute('class')=='lc'){ alist[i].innerHTML.match(/(\d+)(kb)$/); if(RegExp.$1!='')atchs += parseInt(RegExp.$1); } } alert([atchs,'KB'].join('')); })();