android中與js的交互

1.加載本地html文件

		webView = findViewById(R.id.wv);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("file:///android_asset/index.html");   // 這裏是三個斜槓

2. java 中打印html js中的log

webView.setWebChromeClient(new WebChromeClient() {
            // 打印js中的log
            @Override
            public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
                Log.d("xct", "[" + consoleMessage.messageLevel() + "] " + consoleMessage.message() + "(" + consoleMessage.sourceId() + ":" + consoleMessage.lineNumber() + ")");
                return super.onConsoleMessage(consoleMessage);
            }
        });

3. java 中調用js中的方法

  • 方法1 無返回值
webView.loadUrl("javascript:function()");
  • 方法2 有返回值
  //調用js 並獲得返回值
     webView.evaluateJavascript("javascript:function()", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                Log.d("xct", "jsvalue:" + value);
                isFirstIndex = Boolean.parseBoolean(value);
            }
        });

4. js 調用Android方法

Android和JS通過webview.addJavascriptInterface(new JSTest(),“xct”)方法形成對象映射,JS中的xct對象就可以調用Android中的JSTest對象中的方法了。

  • 步驟1:在Android裏通過WebView設置Android類與JS代碼的映射
public class MainActivity extends AppCompatActivity {
    WebView mWebView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView) findViewById(R.id.webview);
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);//設置與Js交互的權限
        //參數1:Java對象名 參數2:Javascript對象名
        //通過addJavascriptInterface() AJavaScriptInterface類對象映射到JS的xct對象
        mWebView.addJavascriptInterface(new JSTest(),"xct");
        // 加載JS代碼
        mWebView.loadUrl("file:///android_asset/javascript.html");

  • 步驟2:定義一個與JS對象映射關係的Android類:JSTest
public class JSTest {

    // 定義JS需要調用的方法,被JS調用的方法必須加入@JavascriptInterface註解
    @JavascriptInterface
    public void hello(String msg) {
        System.out.println("JS成功調用了Android的hello方法");
    }
}

  • 步驟3:將需要調用的JS代碼javascript.html格式放到src/main/assets文件夾裏
<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <title>Carson</title>  
      <script>
         function callAndroid(){
            // 由於對象映射,所以調用test對象等於調用Android映射的對象
           xct.hello("js去調用了android中的hello方法");
         }
      </script>
   </head>
   <body>
      //點擊按鈕則調用callAndroid函數
      <button type="button" id="button1" onclick="callAndroid()"></button>
   </body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章