Linuxなどのメモ書き

PhoneGap: NativeCodeの呼び出し


Rev.1を表示中。最新版はこちら

PhoneGap(iPhone)を使うと、JavaScriptからGPSなどアプリ用のデバイス機能にもアクセスできるのだが、どのような仕組みになっているのか不思議だったので調査した。

JavaScript -> Native(Objective-C) Codeの呼び出し

GPSの機能などを使う場合、JavaScriptからObjective-Cで書かれたプラグインを呼び出す。
Objective-Cのコードを呼び出すには、PhoneGapLib/javascripts/core/phonegap.js.baseのPhoneGap.exec()を使う。

PhoneGap.exec()はコマンドをキューに入れるだけで、キュー内のコマンドの実行はPhoneGap.run_command()で行う。

PhoneGap.run_command()はダミーのiframeを作成して、

gap://<Class>.<command>/[<arguments>][?<dictionary>]

のような形式のURLを作成してRequestを発行する。

Requestが発行されると、Objective-Cのコードが動き出す。UIWebViewDelegateにwebView:shouldStartLoadWithRequest:navigationType:
というメソッドがあり、これは、webViewがコンテンツの読み込みを開始する前に呼び出される。これを使って、gap://へのアクセスを捕まえている。PhoneGapの場合、PhoneGapLib/Classes/PhoneGapDelegate.mの PhoneGapDelegateクラスのwebView:shouldStartLoadWithRequest:navigationType:メソッドが呼び出される。

webView:shouldStartLoadWithRequest:navigationType:メソッドは、ReuqestのURLがgap://だった場合は、URLで指定されたプラグインのメソッドを呼び出す。

例えば、位置情報を扱うPhoneGap用のJavaScriptコードPhoneGapLib/javascripts/core/geolocation.jsでは、例えば以下のようにしてNativeCodeを呼び出している。

JavaScript:
PhoneGap.exec("Location.startLocation", args);  // gap://xxxへRequest発行

Objective-C:
webView:shouldStartLoadWithRequest:navigationType:  // メソッドが呼ばれる
   gap://xxxxへのアクセスなら、URLからプラグインのメソッドと引数を抽出し呼び出し。

   PGLocation.startLocatoin();




最終更新 2011/07/17 18:15:43 - kztomita
(2011/07/17 18:15:43 作成)


リンク

その他のWiki
Linuxメモ
Xnuメモ

会社
(有)ビットハイブ
受託開発やってます。

よくやる仕事

・Webシステム開発(LAMP環境)
・Linuxサーバー設定関連
サーバー移転作業代行

開発事例にデジタルカタログ/マンガビューワーを追加しました。

draggable.jsのスマホ対応版デモページを追加しました。説明はこちら

検索

Adsense
最近のコメント