第10回mozilla拡張機能勉強会-firemobilesimulatorについて

21
1 FireMobileSimulator にににに 2008/09/05 にににに [email protected] http://d.hatena.ne.jp/thorika wa/

Upload: takahiro-horikawa

Post on 15-Jan-2015

2.569 views

Category:

Technology


8 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

1

FireMobileSimulator について

2008/09/05堀川隆弘

[email protected]://d.hatena.ne.jp/thorikawa/

Page 2: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

2

FireMobileSimulator って?

携帯向けサイトのテスト用に開発したFirefox 拡張機能

携帯ブラウザ独自の振る舞いをシミュレート

DoCoMo,Au,SoftBank 3キャリアに対応 http://d.hatena.ne.jp/thorikawa/20080816/1218908754 https://addons.mozilla.org/ja/firefox/addon/8519

Page 3: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

3

携帯ブラウザ独自の振る舞い 特殊な HTTP ヘッダ

user-agent例: DoCoMo/2.0

x-jphone-uidSoftBank で端末を一意に識別する ID

x-up-devcap-screenpixelsAu で端末のスクリーンサイズを示す文字列

etc…

Page 4: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

4

携帯ブラウザ独自の振る舞い 絵文字表示

キャリアごとに多様な記述方式 同じ   (太陽)を表すのにも・・・

DoCoMo SJIS コードバイナリ: \xF8\x9F SJIS コードの 10 進数値文字参照: 

Au Img タグ: <Img localsrc=“44”> Unicode16 進数値文字参照: &#xE63E;

SoftBank 独自の Web コードバイナリ: \x1B\x24\x47\x6A\x0

F

など・・・

Page 5: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

5

携帯ブラウザ独自の振る舞い DoCoMo の UID 送信

DoCoMo の公式サイトで、リンク先の URLに uid=NULLGWDOCOMO というパラメータがあれば、 DoCoMo の NW ゲートウェイで NULLGWDOCOMO の文字列を端末 IDに置き換えてサイトにリクエストする。

Page 6: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

6

携帯ブラウザ独自の振る舞い DoCoMo の i モード ID 送信

リンク先の URL に guid=ON というパラメータがあれば X-DCMGUID という HTTPヘッダを付与する。

Page 7: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

7

携帯ブラウザ独自の振る舞い DoCoMo の UTN( 端末製造番号 ) 送信

a タグや form タグに utn 属性が存在する場合、ユーザーに送信確認ダイアログが表示され、「はい」が選択されると、 user-agent に端末製造番号を組み込んで HTTP リクエストを送信する。

Page 8: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

8

実装の仕組み (1)HTTPリクエスト Firefox の HTTP リクエストをフックし

て HTTP ヘッダや URL を変更する Modify headers アドオンを参考にした

https://addons.mozilla.org/ja/firefox/addon/967

Page 9: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

9

実装の仕組み (1)HTTPリクエスト nsIObserver を実装する XPCOM コン

ポーネントを作成 http-on-modify-request トピックの obse

rver として登録

Page 10: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

10

実装の仕組み (1)HTTPリクエスト http-on-modify-request トピック

HTTP リクエストが作られる直前に通知され、 HTTP リクエストを書き換えることができる

参考 URL[MDC:Setting HTTP request headers]http://developer.mozilla.org/ja/Setting_HTTP_request_headers

Page 11: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

11

実装の仕組み (1)HTTPリクエスト

function myHTTPListener(){};myHTTPListener.prototype.observe = function(subject, topic, data){ if (topic == "http-on-modify-request") { var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel); httpChannel.setRequestHeader("hoge", "foo", false); }else if (topic == "app-startup") { Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService).addObserver(this, "http-on-modify-request", false); } }}

サンプルソース

Page 12: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

12

実装の仕組み (2)絵文字表示 Firefox が HTML/XHTML データを受け取ってから、レンダリングする前に、絵文字のバイナリデータや、数値文字参照文字列( &#63702 など)を、すべてアドオン内部の画像ファイルを参照する img タグに置き換える

Page 13: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

13

実装の仕組み (2)絵文字表示 http-on-examine-response/http-on-exam

ine-merged-response トピックを監視して、 content-type を独自のタイプ text/msim.html に書き換える

text/msim.html⇒text/htmlへの StreamConverter を定義して、その中で絵文字の変換を行う

wmlbrowser アドオンを参考にした

Page 14: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

14

実装の仕組み (2)絵文字表示 nsIStreamConverter を実装する XPCOM

コンポーネントを作成 contractID=”@mozilla.org/streamconv;

1?from=text/msim.html&to=*/*” で定義

作成したコンポーネントを CategoryManager に登録してやれば text/msim.htmlタイプのデータを受信したときに自動で呼び出される

Page 15: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

15

実装の仕組み (2)絵文字表示 onDataAvailable関数 /onStopRequest関数の中

で、文字列の絵文字への置換を行う DOM操作で絵文字置換はできなかったのか?

innerHTML では渡ってくる文字列は全て Unicode &#xxxxx; などの数値参照文字列が自動的に Unicode

として解釈して渡ってくる。(本来は Shift_JISコードとし解釈したいのに・・・)

DOM展開後じゃないと、数値参照文字列自体を置き換えることはできないと判断

Page 16: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

16

実装の仕組み (2)絵文字表示 利用ライブラリ

絵文字置換の関数は PHP の携帯絵文字変換ライブラリ「 MobilePictogramConverter 」を改変

http://php-develop.org/MobilePictogramConverter/

日本語文字コード変換の為に、「 Escape Codec Library 」を利用

http://nurucom-archives.hp.infoseek.co.jp/digital/escape-codec-library.html

Page 17: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

17

実装の仕組み (2)絵文字表示

MsimStreamConverter.prototype.onStopRequest =function (aRequest, aContext, aStatusCode) { this.data = emoji_convert(this.data); var sis = Components.classes["@mozilla.org/io/string-input-stream;1"] .createInstance(Components.interfaces.nsIStringInputStream); sis.setData (this.data, this.data.length);

this.listener.onDataAvailable (this.channel, aContext, sis, 0, this.data.length); this.listener.onStopRequest (this.channel, aContext, aStatusCode);};

サンプルソース

Page 18: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

18

今後の課題 タブごとに端末を設定したい

タブごとに設定を覚えさせたり、タブと HTTP リクエストの関連を情報として取得することが可能か?

HDML とかWML も解釈できるようにしたい HTML/WML ・・・携帯端末向けのコンテンツ記述言語現在は HTML/XHTML で記述するのが一般的だが、一部のページでは未だ使われている

絵文字同様 StreamConverter の処理でソースを書き換えればできそう

Page 19: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

19

今後の課題 開発を楽にしたい

最近 Eclipse+SpketIDE を導入したが、いまいち使いこなせてない

拡張機能開発環境のデファクトって何? 公式のプラグインとして公開したい

レビューがなかなか集まりません><

Page 20: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

20

アドオン開発のコツ 似たようなことをやってるアドオンを探す⇒コードをパクる

MDC や XUL Planet を読む Firefox のソースコードを読む Firefox の拡張点をまとめたサイトがほ

しい><

Page 21: 第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて

21

ご清聴ありがとうございました