QLOOKアクセス解析

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Firefox コード例:ウェブからバイナリ画像をGETしてファイルに保存する

Firefoxアドオンにて、ウェブからバイナリファイル(画像)をダウンロードしてファイルに保存するJavascript例を挙げる。


/******************************************
サーバからバイナリファイルをダウンロードする
*/
var url = "http://blog-imgs-19.fc2.com/k/f/a/kfall/hoge.png";
var request = new XMLHttpRequest();
request.open('GET', url, false);
request.overrideMimeType('text/plain; charset=x-user-defined');
//キャッシュをバイパス(必要ならば)
request.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
req.send(null);
if (req.status != 200) return;
var instream = req.responseText;

/******************************************
バイナリファイルをローカルに出力する
*/
//出力先ディレクトリのパス
var path = "c:\\Users\\ユーザ名\\Desktop\\tmp\\";
//出力先ファイルハンドラの生成
var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
aFile.initWithPath(path);
aFile.append("hoge.png");
//出力ストリームの生成
var outstream = Components.classes["@mozilla.org/network/safe-file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
outstream.init(aFile, 0x02 | 0x08 | 0x20, 0664, 0);
//書き出し
outstream.write(instream, instream.length);
if (outstream instanceof Components.interfaces.nsISafeOutputStream) {
outstream.finish();
} else {
outstream.close();
}


XmlRequestとファイルIOについては以下に詳しい。
cf. XMLHttpRequest
cf. Code snippets:File I/O

また、このコードを書くにあたって「Script雑感」の次の記事を参考にさせていただいた。
cf. Script雑感 Ajax:画像を取得して表示する(Firefox)

「Script雑感」ではブラウザに画像をそのまま表示させており、非常に勉強になった。
以下、画像表示部分の引用:

write_binary_file = function(url) {
// 49 => "1" (decimal)
var filestream = load_url(url);
var bytes = [];
for (i = 0; i < filestream.length; i++)
bytes[i] = filestream.charCodeAt(i) & 0xff;
// 改造
var ele = document.createElement('img');
ele.src = 'data:image/gif;base64,'
+ base64.encode(String.fromCharCode.apply(String, bytes));
document.getElementById('testBinery').appendChild(ele);
}

Firefox コード例:キャッシュをクリアする

FirefoxアドオンからFirefoxのキャッシュをクリアするJavascript例を挙げる。

■キャッシュをまるっと消す
FF3のメニューバーで「ツール→オプション→詳細→ネットワーク→オフラインデータ」とたどり、「今すぐ消去」ボタンを押下するのとほぼ同じようなキャッシュをまるっと消す処理を拡張機能から実行できる。

/********************************************
キャッシュを全部消す
*/
//キャッシュサービスの生成
var caches = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService);
//キャッシュのクリア
caches.evictEntries(Components.interfaces.nsICache.STORE_ANYWHERE);
//↑他にも個別にストレージを指定できる
//STORE_IN_MEMORY, STORE_ON_DISK, STORE_ON_DISK_AS_FILE, STORE_OFFLINE


■キャッシュを個別に消す
特定のキャッシュを指定して消すこともできる。

/********************************************
URLを指定して特定のキャッシュを消去
*/
//消したいキャッシュのURL
var uri = "http://blog-imgs-19.fc2.com/k/f/a/kfall/favicon.ico";
//キャッシュサービスの生成
var caches = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService);
//キャッシュセッション(nsICacheSession)の生成
//第一引数 = "HTTP" ←ミソ。メモリ上の画像は"image"
var cs = this.caches.createSession("HTTP", Components.interfaces.nsICache.STORE_ANYWHERE, true);
cs.doomEntriesIfExpired = false;
//キャッシュエントリ(nsICacheEntryDescriptor)を取得する
//第一引数 = 消したいキャッシュのURL
var dsc = cs.openCacheEntry(uri, Components.interfaces.nsICache.ACCESS_READ_WRITE, true);
if (dsc) {
dsc.doom();
dsc.close();
cs = null;
}


■キャッシュの確認方法
Firefoxのロケーションバーに「about:cache」と入力し、リターンキーを押下すると、キャッシュ情報が参照できる。

Firefoxのキャッシュ操作の参考文献は少ないが、手がかりとしては以下のページがある。
cf. XULPlanet: XPCOM Reference: Cache

Firefox コード例:タイトル付きダイアログプロンプトを出す

Firefoxアドオンから警告や確認ダイアログボックスを出すJavascript例を挙げる。

タイトルを入れられる点が普通のwindow.alert()やwindow.confirm()との違い。

/**************************************
Firefox ダイアログポップアップ
*/
var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
//window.alert()に相当
prompts.alert(null, "タイトル文言", "警告文言");
//window.confirm()に相当
var ret = prompts.confirm(null, "タイトル文言","確認文言");


confirm_fx.png

以下に詳しい。
cf. nsIPromptService

Firefox コード例:SQLite(*.sqlite)を操作する

Firefoxアドオンから、SQLite(*.sqlite)を操作するJavascriptの例を挙げる。

/************************************************
places.sqliteに対しSQLの発行を行う
*/
//ファイルサービスの生成
var myplaces = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);
//アクセスするデータベースファイルを追加
myplaces.append("places.sqlite");
//ストレージサービスの生成
var storages = Components.classes["@mozilla.org/storage/service;1"].getService(Components.interfaces.mozIStorageService);
//DBコネクションの生成
var conn = storages.openDatabase(myplaces);

//SQLの実行(参照)
//この例ではhttp://kfall.blog17.fc2.com/というURLのファビコンのIDを検索
//ステートメントの生成
var stmt = conn.createStatement("SELECT favicon_id, url FROM moz_places WHERE url = ?1");
//バインド変数
stmt.bindStringParameter(0, "http://kfall.blog17.fc2.com/");
//結果取得
while(stmt.executeStep()) {
alert("favicon_id=" + stmt.getString(0) + "\nurl=" + stmt.getString(1));
}
//SQLの実行(更新)
//この例ではhttp://kfall.blog17.fc2.com/というURLのファビコンレコードを削除
conn.executeSimpleSQL("DELETE FROM moz_favicons WHERE id = (SELECT favicon_id FROM moz_places WHERE url = 'http://kfall.blog17.fc2.com/')");


SQLiteの扱いは以下が参考になる。
cf. Storage - MDC

kfall+ Firefox 3ブックマークFaviconリセット手順その2(SQLite Manager)

Firefox 3のキャッシュのクリア方法

Firefox 3のオフラインデータのキャッシュクリア方法をメモしておく。

■Firefoxのキャッシュのクリア方法(標準)
1. メニューバーから「ツール→オプション」を選択する
2. オプションウィンドウの「詳細」タブを選択する
3. 「ネットワーク」タブの「オフラインデータ」の中の今すぐ消去ボタンを押下する

■Firefoxのキャッシュファイル内容の確認方法
Firefoxのロケーションバーに「about:cache?device=disk」と入力しリターンキーを押下すると、ディスクに保存されているキャッシュ情報が参照できる。
例えば、「Cache Directory」項目はキャッシュディレクトリのパスだ。

■Firefoxのキャッシュのクリア方法(アドオン開発者向け)
アドオン(拡張機能)などからJavascriptでキャッシュをクリアすることもできる。
kfall+ Firefoxコード例:キャッシュのクリア

Firefoxのデフォルトのマウスホイールスクロール量が小さすぎる?

Firefoxのデフォルトのマウスホイールのスクロール量が小さすぎるので、私はこの値をFirefoxの設定ファイルであるuser.jsで大きく設定し直している。

user.jsはC:\Users\ユーザ名\AppData\Roaming\Mozilla\Firefox\Profiles\ランダム値.defaultの下にある(Vistaの場合)。存在しない場合は、「user.js」という名前でファイルを新規作成すればよい。

user.jsをテキストエディタで開き、以下の設定を追記して保存する。

//Firefoxのマウスホイールスクロール量を5に設定(デフォルトは1)
user_pref("mousewheel.withnokey.numlines", 5);
user_pref("mousewheel.withnokey.sysnumlines", false);


後はFirefoxを再起動すれば設定が反映される。

Firefox 3ブックマークFaviconリセット手順その2(SQLite Manager)

Firefox 3でブックマークFaviconをリセット(リフレッシュ)する方法を「Firefox 3のブックマークFaviconリセット手順その1(Favicon Picker)」に載せたが、別の方法としてFaviconを管理しているデータベースを直接いじるものがある。

Firefoxのデータベースを操作するのはリスクは高いが、他にも応用が利きそうなのでメモしておく。Firefoxのデータベース操作にはSQLite Managerというアドオンを使う。
(実施環境:Windows Vista + Firefox 3.0 + SQLite Manager 0.2.46)

sqlitemanager.png

■SQLite Managerのインストール
まず、SQLite Managerをインストールする。

1. Firefoxからhttps://addons.mozilla.org/ja/firefox/addon/5817にアクセスする
2. 「Firefoxへインストール」ボタンを押下する
3. ソフトウェアインストールウィンドウで「インストール」ボタンを押下する
4. Firefoxを再起動する

■SQLite Managerを使ってFaviconをリセットする
次にSQLite Managerを使って、Faviconをリセットする。

1. データベースファイルを別の場所にバックアップ(コピー)する。バックアップ対象は、Vistaの場合、C:\Users\ユーザ名\AppData\Roaming\Mozilla\Firefox\Profiles\ランダム値.defaultの下の「places.sqlite」という名前のファイルである。
2. Firefoxのメニューバーから「ツール→SQLite Manager」でSQLite Managerを起動する
3. SQLite Managerのツールバーの「Connect Database」を押下する
4. places.sqliteファイルを選択し、「開く」ボタンを押下する。Vistaの場合、places.sqliteは、C:\Users\ユーザ名\AppData\Roaming\Mozilla\Firefox\Profiles\ランダム値.defaultの下にある。
5. メインビューの「Execute SQL」タブを選択する
6. 「Enter SQL」入力欄に次のSQLを書く。

DELETE FROM moz_favicons WHERE id = (
SELECT favicon_id FROM moz_places WHERE url = '●●●')


●●●の部分にはリセット対象のブックマークのURLを入れる。このURLは、ブックマークのプロパティで確認できる。例)http://kfall.blog17.fc2.com/

7. 「Run SQL」ボタンを押下する
8. SQLite Managerを終了する

■Firefoxのローカルキャッシュをクリアする
Firefoxのオフラインデータキャッシュをクリアする。
これを行わなくてもうまく行く場合もあるが、実施しておいた方が確実と思われる。
方法は以下のエントリを参照のこと。
kfall+ Firefox 3のキャッシュのクリア方法

最後にFirefoxを再起動する。

以上で、目的のブックマークのFavicon自体はリセット(無地アイコン化)される。後はブックマークからサイトにアクセスすれば、新たにFaviconが読み込まれる。

kfall+ Firefox 3のブックマークFaviconがキャッシュクリアでリセットされない?

【2008/7/6追記】
この記事の内容を元にFaviconのリセットに特化したアドオンを作ったので以下のエントリにアップした。
kfall+ Firefox 3のFaviconを最新化するアドオン(Reget Favicon)

Firefox 3ブックマークFaviconリセット手順その1(Favicon Picker)

Firefox 3ではFaviconが一度取込まれてしまうと、その後、サイト側でFaviconが更新されてもローカルのブックマークFaviconに反映されない。Firefox 2まではブックマークを削除後、キャッシュをクリアすればFaviconもクリアされたようだが、Firefox 3ではキャッシュを消してもうまく行かなかった。
kfall+ Firefox 3のブックマークFaviconがキャッシュクリアでリセットされない?

そこで、Favicon Picker 3というアドオンを使って、Firefox 3のブックマークFaviconをリセットする方法をメモしておく。
(実施環境:Windows Vista + Firefox 3.0 + Favicon Picker 3 0.4.0.3)

※ちなみにこことは違う方法を以下のエントリに掲載してある。興味があれば参照してほしい
kfall+ Firefox 3ブックマークFaviconリセット手順その2(SQLite Manager)
kfall+ Firefox 3のFaviconを最新化するアドオン(Reget Favicon)

■Favicon Picker 3のインストール
まず、Favicon Picker 3をインストールする。
2008/6/29現在、Favicon Picker 3をダウンロードするにはFirefox Add-onsに事前にユーザ登録しておく必要がある。登録は以下からできる。
cf. Firefox Add-ons: ユーザ登録

1. Firefoxからhttps://addons.mozilla.org/ja/firefox/addon/7849にアクセスする
2. 「Firefoxへインストール」ボタンを押下する
3. ログイン画面がでるので、Firefox Add-onsに登録したメールアドレスとパスワードを入れ、ログインボタンを押下する
4. 「Firefoxへインストール」ボタンを押下する
5. ソフトウェアインストールウィンドウで「インストール」ボタンを押下する
6. Firefoxを再起動する

■Favicon Picker 3を使ってFaviconをリセットする
次にFavicon Picker 3を使って、Faviconをリセットする。

1. Cntl+Bでブックマークサイドバーを表示する
2. ブックマークサイドバーからリセットしたいブックマークを右クリックし、プロパティを選択
3. プロパティ画面の「Reset」ボタンを押下する→左側のアイコンが消える

faviconPicker.png

4. 「変更を保存」ボタンを押下する
5. Cntl+Bでサイドバーを閉じる
6. Cntl+Bでサイドバーを開く

これで目的のブックマークのFaviconはリセット(無地アイコン化)される。

■Firefoxのローカルキャッシュをクリアする
最後にFirefoxのオフラインデータキャッシュをクリアする。これは実施しなくてもうまく行く場合もあるが、行っておいた方が確実と思われる。方法は以下のエントリを参照のこと。
kfall+ Firefox 3のキャッシュのクリア方法

これで、目的のサイトにアクセスすれば、新たにFaviconが読み込まれるはずである。
しかし、Favicon Pickerの不具合(エラー)か、私の環境のせいか分からないが、今度は目的のサイトにアクセスしても、Faviconが読み込まれないことがある。その場合は以下の手順を行う。

■Favicon Picker 3を無効化する
1. メニューバーから「ツール→アドオン」を選択
2. アドオン画面でFavicon Picker 3を選択し、「無効化」ボタンを押下する
3. Firefoxを再起動する

Firefox 3のブックマークFaviconがキャッシュクリアでリセットされない?

Firefox 3ではFavicon(※)が一度取込まれてしまうと、その後、サイト側でFaviconが更新されてもブックマークのFaviconに反映されない(ロケーションバーやタブのものは更新されることもある)。これでは自分のホームページのfaviconを色々変えて見る際に、変更後のFaviconの確認ができず非常に不便だ。

※ファビコン。ロケーションバー、ブックマーク、タブのサイト名の左側に表示されるアイコン
favicon1.png

Firefox 2まではブックマークを削除後、キャッシュをクリアすれば、ブックマークFaviconもクリアされたようだ。
cf. 各ブラウザでブックマークのfaviconを更新する方法 ←FF2の方法

しかし、Firefox 3ではFaviconの管理方法が変わったらしく、キャッシュを消してもうまく行かなかった。キャッシュファイルを物理的に削除することも試みたが効果は無かった。
kfall+ Firefox 3のキャッシュのクリア方法

そこでFirefox 3でブックマークFaviconをリセット(リフレッシュ)する方法を調査したので、以下のエントリに記載しておいた。
kfall+ Firefox 3ブックマークFaviconリセット手順その1(Favicon Picker)
kfall+ Firefox 3ブックマークFaviconリセット手順その2(SQLite Manager)

また、調べた内容を元にFaviconの最新化に特化したアドオンを作った。
ファビコンをリフレッシュする目的ならば、Favicon Pickerよりお手軽で便利かもしれない。
kfall+ Firefox 3のFaviconを最新化するアドオン(FF3 Favicon Resetter)

AdrToLdifでアドレス帳の階層が崩れる?(AL-Mail→Thunderbird移行)

AdrToLdif(Java版)という素晴らしいツールを使うと、簡単にAL-Mailのアドレス帳をThunderbirdに移行できる(AL-MailからThunderbirdへの移行手順)。
しかし、私の場合、AdrToLdifでAL-Mail→Thunderbird移行後にThunderbirdアドレス帳のグループ階層構造がおかしくなってしまった。

解決法としては、AdrToLdifを使用する前に、AL-Mailのアドレスファイル(*.adr)のインデントを削除しておくと良いようだ。

-----インデント削除前のADRファイル-----
Group 友達
    山田さん: yamada@xxxxxxx.ne.jp
    鈴木さん: suzuki@xxxxxxx.ne.jp
    佐藤さん: satou@xxxxxxx.ne.jp
End group


-----インデント削除後のADRファイル-----
Group 友達
山田さん: yamada@xxxxxxx.ne.jp
鈴木さん: suzuki@xxxxxxx.ne.jp
佐藤さん: satou@xxxxxxx.ne.jp
End group


インデント削除の方法は様々だが、例えばsakuraエディタならば以下のようにすればよい。
1. AL-Mailのアドレスファイル(*.adr)をsakuraエディタで開く
2. Cntl+Rで置換ウィンドウを立ち上げる
3. 「置換前」欄に「^ *」(^*の間に半角スペース)と入力する
4. 「置換後」欄にはなにも入力しない
5. 「正規表現」チェックボックスをチェックする
6. 「すべて置換」ボタンを押下する

最近の記事

みんなの拡張機能
シリーズ記事一覧
カテゴリ一覧
ブログ内検索
QRコード
QR
プロフィール

くふぉーる

はじめまして。日本のシステムエンジニア「くふぉーる」です。
このブログではできるだけ役立つ記事を掲載することを心がけています。

RSSフィード
このブログについて
・ このブログは全記事リンクフリーです。
・ スパム対策として、トラックバック、コメントは承認制にしてあります。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。