Androidとjavascriptの連携
Webkitを搭載しているAndroidでは、もちろんjavascriptも動く。 そして、すばらしいことにjavascript側からAndroidのオブジェクトをいじくったり、 関数を起動したりすることも可能という。
実際に使ってみたので、以下のソースを参照のこと。
Android側
public void hoge(){
WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
object = new JsObject();
view.addJavascriptInterface(object, "output");
setContentView(view);
view.loadUrl("http://chephes.sakura.ne.jp/AndroidTest/");
}
class JsObject{
public int a = 100;
public void test(){
a = 10;
}
}
Webページ側
<script type="text/javascript">
output.test();
</script>
こんな感じに記述すると、ページを読み込んだ時点でoutput.test();が実行されて、 aの値に10が代入される。
| 固定リンク


コメント
こんにちは。
一瞬面白そうな気がしたのですが、ちょっと疑問があります。output.test()で実行される処理がWebページ側の想定と違う場合もあると思います。別のアプリが同じページにoutput.test()を関連づけていた、というような場合です。
(1) AndroidアプリAでアクセスすると処理Aが実行されるサイトがある。(2) 悪意ある第三者が、同じサイトにアクセスすると危険な処理Bが実行されるAndroidアプリBを配布...といったことができてしまうのではないですか?
投稿: kazhik | 2007年12月 4日 (火) 21時08分
なるほど。確かに悪意のあるコードは実行できそうですね。
しかし基本的には読み出すURLはAndroid側で制御するので、特定のURLの箇所しか読み出さないような仕様にすれば、そこまで気にするべき問題ではないかと思います。
また、逆に任意のコードが実行できるというのは、危険ですが同時に応用次第では面白くもありますね。
投稿: chephes | 2007年12月 5日 (水) 09時08分