2012年7月24日火曜日

Firefoxアドオン開発-設定値の保存

ドラゴンクルセイド2F用アドオン開発日記でございます。
事前審査も通りましたんで絶賛?テスト公開中です。

チャットの自動読み込みと税金の自動徴収を設定値を保存できるようにいたしました。
その際に「アドオンの設定を保存する方法」を学んだのでメモしておきます。

Preferences-MDN ←に書いてある事ほぼそのままなんですけど、ブランチ取得してsetなんちゃら、getなんちゃらメソッドでやるだけです。

// "extensions.myext" ブランチを取得
var prefs = Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefService);
prefs = prefs.getBranch("extensions.myext.");


nsIPrefBranch には設定の取得・設定のための 6 つのメソッドがあります。getBoolPref(), setBoolPref(), getCharPref(), setCharPref(), getIntPref() そして setIntPref() です。

// nsIPrefBranch 経由の設定操作
// branch を取得する方法は一つ上の章を読んでください
var value = prefs.getBoolPref("accessibility.typeaheadfind"); // 取得
prefs.setBoolPref("accessibility.typeaheadfind", !value); // 設定


prefs.getBranch()の時に最後のドットを忘れて10分くらいハマりました。はい。

規定値の設定は「/defaults/preferences/*.js」だそうで、
そこに
pref("extensions.extensionname.preferencename", false);
って感じで書いてやれば勝手に読み込んでくれます。

やってみると非常に簡単なんですけど、MDNのページ読んでると難しそうに見えました。
扁桃炎でちょっとボケてるのかも・・・。

2012年7月7日土曜日

Firefoxアドオン開発-テキストが選択できない件

毎度どうもゲームするよりゲーム用のアドオン作ってる方が楽しいんじゃないかと思う今日この頃の佐藤です。

Firefox用アドオン-DC2Fサポートを作ってて苦労した事のメモなんです。

まずチャットの表示をどのようにするべきなのかわかりませんでした。

今のところboxの中にdescriptionタグで落ち着きました。labelでもできると思います。
ちなみに最初はiframe使ってその中でpタグでやってました。
なんでそうしたかは忘れました。
descriptionとかlabelとか知らなかったからだったかな・・・。
https://developer.mozilla.org/ja/XUL/description

次に、世界チャットだけ表示できない問題に悩まされました。
これは世界チャットだけ内容にタグが入っているからでした。
タグを抜き取ることでひとまずよしとしました。
後ほど色付けする予定。

そして、表示したテキストが選択できない問題の登場です。
こいつには相当悩まされましたが、FirebugでCSSを眺めている時に 「-moz-user-select」といういかにもなプロパティを発見し、グーグル先生に聞いたらやっぱりこいつのせいだって言ってました。
https://developer.mozilla.org/En/CSS/-moz-user-select

こんな感じでCSSを設定して解決しました。

.chatLine{
margin:0 0 0 0;
padding:0 5px;
line-height:15px;
display:block;
-moz-user-select:text;
-moz-box-sizing:border-box;
cursor:text;
}

Firefoxアドオン開発-JQueryの.append()で書き込めなかったんすよ。

DC2Fアドオン作成中、チャットの表示をしようとする時に
TypeError: p is null

ってエラーに悩まされた。

初歩的な話っぽいけど、XULで「<」とか「&」とか.append()で書き込もうとするとでるっぽい。
タグいれたきゃはこんな風にしろってさあああああ。
var href = "http://www.google.com/";
var text = "Google";
$("body").append(
$("<div>", { class: "foo" })
.append($("<a>", { href: href, text: text })
.click(function (event) { alert(event.target.href) }))
.append($("<span>").text("Foo")));

&はどうすればいいのかまだわからない・・・。
XUL_School/DOM_Building_and_HTML_Insertion#jQuery_Templating

っていうか子供泣き過ぎでブログ書けねぇ!腕を引っ張るな!wwwwww

Firefoxアドオン開発-cookieの取得(XPCOMの利用)

DC2FはクッキーにセッションIDが保存されておるので、それを取得したかったんです。
でもFirefoxに保存されたクッキーをどうやったら覗けるのかがわからんかった。

XPCOMだろうなぁ。と思って検索したらわかりました。

XPCOMの利用例(クッキー)
ここにある例を参考に無事取得することができたので、アドオンの下準備部分を書き換えましたよ。
わかれば意外と簡単ですね。
MDNのページってところどころ日本語訳のページなかったりで見づらいっす。


2012年7月3日火曜日

Firefoxアドオン開発-Webコンソール

WEBコンソール今使ってみてすげー便利ってわかったよ・・・。

Web Console

そしてFirebugの良さを再認識だよ・・・。

Webコンソールみて

-- [23:41:45.408] Web コンソールのログ記録 API (console.log, console.info, console.warn, console.error) は、このページ上のスクリプトにより無効化されています。

とかでててconsole.log()が使えねえ!って調べてたら、Firebugのコンソールにでてるだけじゃねえか!恥ずかしいw
alert()で頑張ってたとかほんと恥ずかしい。

つーかもう今使いたかった程度の事ならconsole.logすらいらねーじゃん。
オブジェクトの中身とかコマンドライン インタプリタで十分じゃんじゃんじゃじゃーん。
何故今まで俺はこの辺の情報に辿り着けなかったんだああああああああああああああああああああああああ。うんこおおおおおおおおおお。

Firefoxアドオン開発-アドオンのテスト

開発中のアドオンのテストする時にいちいちXPI更新するのは面倒なので下記のような方法を使っているわけです。

一回addons.mozilla.orgにUPしてインストールした時に、IDが同じだからローカルのが消えちゃってたわけですね。(消しちゃってたのかもだけど)

んでもっかいやろうとした時にアレ?っとなったのでメモしとく。

ちなみにプロファイルフォルダは自分の場合はここ↓にありましたよ。

C:\Documents and Settings\[ユーザー名]\Application Data\Mozilla\Firefox\Profiles\プロファイルフォルダ

 

以下 Building_an_Extensionより

テスト

最初に、我々はあなたの拡張機能の存在を Firefox に伝えなくてはなりません。昔、Firefox 1.0 の頃にはこれは、あなたの拡張機能を XPI としてパッケージ化して、ユーザインタフェースを通じてそれをインストールする事を意味していました。これが実に辛い。でも、今はもっとずっと簡単です。
  1. あなたの環境の プロファイルフォルダを開いてください。
  2. そこにある extensions という名前のフォルダを開いて下さい。(なければ作成して下さい。)
  3. 新しいテキストファイルを作成して、その中にあなたの機能拡張フォルダのパス(例:「C:\extensions\myExtension\」とか「~/extensions/myExtension」とか。)を書いて、そのファイルをあなたの拡張機能のIDと同じ名前(例:「sample@foo.net」)で保存して下さい。
これで拡張機能のテストの準備ができました!
Firefoxを起動します。Firefox はあなたの拡張機能のディレクトリへのテキストリンクを検出して、そして拡張機能をインストールしてくれます。ブラウザウインドウが表示されると、ステー タスバーパネルの右側でテキスト「Hello, World!」と表示されているのが見えるでしょう。
戻って「.xul」ファイルを修正した場合も、ファイルを閉じて Firefox を再起動すれば、その結果が反映されます。

んで更にアドオンで再起動ボタンとか入れとくと楽だと思う。