2011-06-30 5 views
1

私のアプリのWebViewアクティビティで "A.B.func()"という形式のJavaScriptをサポートしたいと考えています。ここで WebView.addJavascriptInterfaceを使用してjavascript関数形式のJavaクラスを "A.B.func()"としてバインドする方法

WebページのHTML & jsのコードはサンプルですなど:

<html> 
    <body> 
     <script type="text/javascript"> 
      document.write("B.func1() return " + A.B.func()); 
     </script> 
    </body> 
</html> 

そして、私のJavaコードは次のような次のとおりです。しかし、私は私の実行時に

public class MyDemo extends Activity { 
    private WebView mWebView; 

    public void onCreate(Bundle savedInstanceState) { 
     ... 
     mWebView = (WebView)findViewById(R.id.webView1); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.addJavascriptInterface(new AClass(), "A"); 
     mWebView.loadUrl("file:///android_asset/mydemo.html"); 
    } 

    final class AClass { 
     final class BClass { 
      BClass() {} 
      int func() { return 1; } 
     } 

     public BClass B = new BClass(); 

     AClass() {} 
    } 
} 

それは正しい方法で実行することはできませんシミュレータ上のアプリ。だから私の質問がある TypeError : Result of expression 'A.B' [undefined] is not an object. at file:///android_asset/mydemo.html


1.私は私のJavaクラスに「ABfunc()」としてjavascriptのインタフェースフォーマットをバインドしたい場合、どのように私はそれを行うことができますし、LogCatは、次のような私に警告を送ります?
2.関数呼び出しではなく、javascriptクラスのプロパティを直接取得したい場合、どうすればいいですか? あなたの助けを期待Q2 利用 "するvar小道具= A.property" 使用しない "VARプロップ= A.getPropertyを()"

を表示するにはjavascriptのサンプル!ありがとうございました!

答えて

3

私はできないと思います。 b_doSomething(){B.doSomething()}のように、あなたの呼び出しを "転送"するようなメソッドをAに追加するだけで、javascriptから呼び出すことができます。

プロパティへのアクセスについては、JavaScriptのインターフェイスがメソッドを呼び出すために作られているとは思えません。(普通のJavaインターフェイスとほぼ同じですね。)

3

LogCatでEclispeのメッセージを表示 "Uncaught TypeError:Object [オブジェクトオブジェクト]にメソッド 'トースト'がありません。しかし、電話でそれは正常に動作します...

<script> 
    function doHemant() { 
     jse.doThis(); 
    } 
</script> 

<input type="button" value="Toast" onClick="doHemant();" /> <br /> 

wv.addJavascriptInterface(new JavaScriptExtensions(), "jse"); 

class JavaScriptExtensions 
{ 
    public void doThis() 
    { 
     Toast.makeText(MainActivity.this, "Wata Toast...", TOAST_LONG).show(); 
    } 
}