2011-10-05 12 views
5

WebViewオブジェクトのJavaScriptインターフェイスからメインアクティビティのメソッドを呼び出すことはできますか?または、このインターフェースからSharedPreferencesにアクセスして、私の活動でデータを読むことができましたか?特定のJavaScriptアクションが発生したことをアクティビティに伝えたいと思います。Android WebView:コールアクティビティメソッドフォームJavaScriptインターフェイス

+0

[JavaScriptインターフェイスをブラウザに追加](http://stackoverflow.com/questions/3765860/adding-javasc) ript-interface-to-a-browser) – skolima

答えて

3

はい、JavaScriptとアプリケーション間の双方向通信はWebView.addJavascriptInterface()から可能です。この例をチェックしてください:

http://android-developers.blogspot.com/2008/09/using-webviews.html

+0

これは私の問題を解決します。 DemoJavaScriptInterfaceはWebViewDemoクラスのサブクラスであり、そのメソッドにアクセスできるため、あなたが与えた例では動作します。しかし、それがサブクラスではないときに達成する方法はありますか? – Krzychu

+0

'WebViewDemo'メソッドは使用しません。それは 'mHandler'のみを使用し、コンストラクタに渡すことができます。 – Caner

+0

私は 'mHandler'を渡そうとしましたが、主なアクティビティにはまだアクセスできません。 'mHandler.post(new Runnable(){ } {0} {mWebView.loadUrl(" javascript:wave() "); } }}); '_myWebViewは解決できません。 – Krzychu

1

あなたはこれを達成するためにWebView.addJavascriptInterface機能を使用することができます。さらに詳しい情報:In Google documentation

+0

はい、addJavascriptInterface(新しいJavaScriptInterface(this)、 "Android")を使用しています。問題はJavaScriptInterfaceクラス内からメインアクティビティのメソッドを呼び出す方法でした。 – Krzychu

+0

あなたは現在のコードであなたの質問を更新できますか? – SERPRO

2

あなたの活動:

/* 
* entry point of the application starting the index.html of PhoneGap 
* */ 

package com.test.my.myApp; 

import org.apache.cordova.DroidGap; 

import android.os.Bundle; 
import android.util.Log; 

import com.google.analytics.tracking.android.EasyTracker; 

public class MyOpelMainActivitiy extends DroidGap 
{ 

    String curPhoneNumber; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     super.setIntegerProperty("splashscreen", R.drawable.splash); 
     super.loadUrl("file:///android_asset/www/app/index.html",15000); 

    } 
    @Override 
    public void onStart() { 
     super.onStart(); 
     this.appView.addJavascriptInterface(new JsInterface(), "android"); 
     curPhoneNumber = "test"; 

     // The rest of your onStart() code. 
     EasyTracker.getInstance().activityStart(this); // Add this method. 
    } 

    @Override 
    public void onDestroy() 
    { 
     super.onDestroy();  
     com.google.analytics.tracking.android.EasyTracker.getInstance().activityStop(this); 
    } 

    public class JsInterface{ 





      public String getPhoneNumber() 
      { 

       // Here call any of the public activity methods.... 
       return curPhoneNumber; 
      } 
     } 
    } 

HTMLマークアップ:

<script type="text/javascript"> 
      alert(android.getPhoneNumber()); 
     </script> 

=================== ========================================== ===

+0

この例では、api17 +のgetPhoneNumberにはアノテーション@ android.webkit.JavascriptInterfaceが必要です – MazarD