2012-05-06 17 views
24

私は私のwebviewでjavascriptインターフェイスからアクティビティを開始しようとしています。 例はトーストを示しています。私はどのようにトーストの代わりにクラスを呼び出すことができますか?android webviewのjavascriptを使用して

public class JavaScriptInterface { 
Context mContext; 

/** Instantiate the interface and set the context */ 
JavaScriptInterface(Context c) { 
    mContext = c; 
} 

/** Show a toast from the web page */ 
public void showToast(String toast) { 
    Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
} 
} 

これはHTMLページです。あなたが最初にあなたのWebViewにJavaScriptInterfaceを登録する必要が

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /> 

<script type="text/javascript"> 
function showAndroidToast(toast) { 
    Android.showToast(toast); 
} 

+3

私は答えが十分ではありませんが、これを読んでください:http://developer.android.com/guide/webapps/webview.html#UsingJavaScript – JaredMcAteer

+0

私はすでにそれを行っています。 – Common

+0

私はちょうどあなたがwebviewでjavascriptを有効にした場所は見当たりませんでした。 – JaredMcAteer

答えて

60

。 JavaScriptInterFaceは、以下に示すように内部クラスにすることができます。このクラスには、htmlページ(javaScript経由)から呼び出すことができる関数があり、この関数内では、アクティビティを変更するコードを書くことができます。ここで

はあなたのための実用的なソリューションである:ここで

public class JavascriptInterfaceActivity extends Activity { 
    /** Called when the activity is first created. */ 


    WebView wv; 

    JavaScriptInterface JSInterface; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     wv = (WebView)findViewById(R.id.webView1); 

     wv.getSettings().setJavaScriptEnabled(true); 
     // register class containing methods to be exposed to JavaScript 

     JSInterface = new JavaScriptInterface(this); 
     wv.addJavascriptInterface(JSInterface, "JSInterface"); 

     wv.loadUrl("file:///android_asset/myPage.html"); 

    } 


    public class JavaScriptInterface { 
     Context mContext; 

     /** Instantiate the interface and set the context */ 
     JavaScriptInterface(Context c) { 
      mContext = c; 
     } 

     @android.webkit.JavascriptInterface 
     public void changeActivity() 
     { 
      Intent i = new Intent(JavascriptInterfaceActivity.this, nextActivity.class); 
      startActivity(i); 
      finish(); 
     } 
    } 
} 

は、HTMLページが

ある
<html> 
<head> 
<script type="text/javascript"> 
function displaymessage() 
{ 
JSInterface.changeActivity(); 
} 
</script> 
</head> 

<body> 
<form> 
<input type="button" value="Click me!" onclick="displaymessage()" /> 
</form> 
</body> 
</html> 

・ホープ、このことができます...

+0

ありがとう、私の友人。それは私の問題を解決するのにほとんど役立ちました。 – Common

+0

@ Common上記のhtmlコードを別のhtmlファイルに入れてください。 –

+4

これはjavascriptからアンドロイド関数を呼び出すのに便利ですが、アンドロイドコードからjavascript関数を呼び出す方法はありますか? –

18

また@androidを追加する必要があります.webkit.JavascriptInterface changeActivityメソッドの上にAndroidのコードで注釈を追加するには、Android 4.2以降で実行する必要があります。 詳細はlinkをご覧ください。

+0

上記の回答への追加情報は非常に便利です! – David

+0

あなたは天才です – ashutosh

+0

それは私を助けてくれます – vm345

関連する問題