スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
【Android】JsBridgeで引数に数字を使うときは必ずすること
こんにちは
最近JSBridgeの仕組みをいじっていてAndroid2系とAndroid4系で違いを発見したのでまとめます。
ここではJSブリッジする時にjsからのインターフェースとなるクラスを定義してみます。
単純にidを受け取りTestActivityに対してidを一緒につけてintentを発行するだけの簡単な処理ですね。
1.で作成したクラスを実際にwebviewにブリッジとして設定してみます。
注意すべきはaddJavascriptInterfaceはJSで指定するクラス名だと言うことです。ここでは1.で作成したクラスと同名にしていますが、極端な話全く違う物でも構いません。要はJSと合ってさえいれば問題ないです。
これでjavascriptからネイティブの機能の呼び出しに成功しました。
ひとつ注意点があります。js側の実装でexecuteIntentに渡す場合Stringで文字列にしているのには理由があります。
ここで整数を代入しても問題はありません。いい感じにしてくれます。
ところが整数にしてしまうとAndroid4.x系では桁数の大きい数字は1.000000e+06のようなフォーマットに変換されてしまいますので注意が必要です。Android 2.x系では起きない現象であることは確認済みです。
両方のOSで満足の行く挙動を実現するのにはStringで文字列にしておいたほうがよさそうです。
OSでの違いにはこの点に関しても要注意だと思います。
結論は
JsBridgeで引数に数字を使うときは必ず文字列で渡す
というのが安心だと思います。
僕もたまたま発見したので幸運でした。
最近JSBridgeの仕組みをいじっていてAndroid2系とAndroid4系で違いを発見したのでまとめます。
1. ブリッジのクラス定義
ここではJSブリッジする時にjsからのインターフェースとなるクラスを定義してみます。
単純にidを受け取りTestActivityに対してidを一緒につけてintentを発行するだけの簡単な処理ですね。
2.WebViewにブリッジとして設定する
1.で作成したクラスを実際にwebviewにブリッジとして設定してみます。
注意すべきはaddJavascriptInterfaceはJSで指定するクラス名だと言うことです。ここでは1.で作成したクラスと同名にしていますが、極端な話全く違う物でも構いません。要はJSと合ってさえいれば問題ないです。
3.javascript側で実行する
これでjavascriptからネイティブの機能の呼び出しに成功しました。
4.注意点とまとめ
ひとつ注意点があります。js側の実装でexecuteIntentに渡す場合Stringで文字列にしているのには理由があります。
ここで整数を代入しても問題はありません。いい感じにしてくれます。
ところが整数にしてしまうとAndroid4.x系では桁数の大きい数字は1.000000e+06のようなフォーマットに変換されてしまいますので注意が必要です。Android 2.x系では起きない現象であることは確認済みです。
両方のOSで満足の行く挙動を実現するのにはStringで文字列にしておいたほうがよさそうです。
OSでの違いにはこの点に関しても要注意だと思います。
結論は
JsBridgeで引数に数字を使うときは必ず文字列で渡す
というのが安心だと思います。
僕もたまたま発見したので幸運でした。
スポンサーサイト