Google Image Charts APIに対する非推奨の警告に注意して、新しいJavaScript GoogleChartsAPIを使用するためのアプリケーションのアップデートをリリースしようとしています。明らかにAndroidWebKitのバージョンに依存する軸のラベル付けでJavaScriptの問題が発生しています。Webkitクライアント内でSVGがサポートされていないため、GoogleChartsAPIの使用は3.1より前では機能しないことを認識しています。
バックグラウンド
アプリケーションは現在、Eclair(APIレベル7)をサポートしており、SVGサポートはHoneycomb MR1(APIレベル12)の組み込みWebKitクライアントでのみ提供されます。この機能の不一致に対処するために、私のコードでは、使用するチャートAPIを決定する前に、Androidのバージョンを検査する単純なif-elseステートメントを使用しています。
レンダリングの問題
これは写真で最もよく示されます。その点に注意してください;
- JellyBeanデバイスと同じJavaScriptがAndroidHoneycombEmulatorで実行されています。
- 比較は、エミュレーター(機能していない)と実際の電話(機能している)の間です
- JavaScriptは、組み込みの機能を利用してWebView内から実行されています
android.webkit.WebViewClient
- エミュレーターの軸は
[Object object]
、実際のデバイスでは正しく表示されます
図1 -HoneycombEmulatorで見つかった誤った軸ラベル。
図2-実デバイスで見つかった正しい軸ラベル。
コード
「貼り付け爆撃」がない場合、無関係なコードの塊に関する問題は、垂直(v)軸の命名を駆動するJSとJavaのビットを以下に説明します。
JavaScript
...
As part of the chart options...
...
// Vertical axis.
vAxis: {title: yAxisTitle.toString(),
baselineColor: 'white',
titleTextStyle: {color: 'gray'},
textStyle: {color: 'gray'},
gridlines: {color: 'gray'}
}
そのようyAxisTitle
にAndroidを介して注入された場所。WebView.addJavascriptInterface
Java
chart.addJavascriptInterface(String.format(getString(string.height_label), getUnits().getSymbol()), "yAxisTitle");
これまでの調査
以前の説明に簡単に遭遇したことから[Object object]
(私はJSの世界に不慣れです)、JavaScriptオブジェクトでtoStringを実行しているだけであり、そのように見えることを理解しています。しかし、これは、Android 3.1と4.1の間でJava-JavaScriptインジェクションに変更があったことを意味します。つまり、addJavascriptInterfaceを介してインジェクトされるデータ型は、以前は「記憶」されていませんでした。文字列をJSONオブジェクトにシリアル化する必要がありますか、それとも(ほぼ)プリミティブ型を渡すものに対してそれはやり過ぎですか?最後に、軸ラベルなどのアイテムに使用されているオブジェクトの種類が実際に文字列であることを強制するために、JS側で明示的にキャストする必要がありますか?感謝します。