效果如:
主要用到一個介面類:MyObject
package com.example.jsdemo; import android.content.Context; import android.support.v7.app.AlertDialog; import android.webkit.JavascriptInterface; import android.widget.Toast; public class MyObject { private Context context; public MyObject(Context context) { this.context = context; } //將顯示Toast和對話方塊的方法暴露給JS指令碼呼叫 @JavascriptInterface public void showToast(String name) { Toast.makeText(context, name+"我是後臺追加的", Toast.LENGTH_SHORT).show(); } @JavascriptInterface public void showDialog() { new AlertDialog.Builder(context) .setTitle("標題") .setMessage("我是Java不帶參").create().show(); } }
MainActivity實現如:
package com.example.jsdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.webkit.WebSettings; import android.webkit.WebView; public class MainActivity extends AppCompatActivity { private WebView wView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wView = (WebView) findViewById(R.id.wView); wView.loadUrl("file:///android_asset/demo1.html"); WebSettings webSettings = wView.getSettings(); //①設定WebView允許呼叫js webSettings.setJavaScriptEnabled(true); webSettings.setDefaultTextEncodingName("UTF-8"); //②將object物件暴露給Js,呼叫addjavascriptInterface wView.addJavascriptInterface(new MyObject(MainActivity.this), "myObj"); } }
然後是main的佈局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="hello_world" android:id="@+id/textView" /> <WebView android:id="@+id/wView" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="5dp" /> </RelativeLayout>
最後是html檔案:
<html> <head> <title>Js呼叫Android</title> </head> <body> <input type="button" value="JS呼叫Java(帶參)" onclick="myObj.showToast('我是Js引數~');"/> <input type="button" value="JS呼叫Java(不帶參)" onclick="myObj.showDialog();"/> </body> </html>
原始碼下載