返回

WebView与JS的通讯机制

IOS

WebView是Android中用来显示网页的控件,它可以将网页内容嵌入到应用程序中,而JS是网页开发的脚本语言,可以用来实现各种交互效果。WebView和JS的通讯机制可以通过以下几种方式实现:

  1.
  
  Java和JS可以通过WebView提供的addJavascriptInterface()方法来实现互调,这种方式需要在Java端注册一个接口,并在JS中使用这个接口来调用Java的方法。例如:

  java   public class MainActivity extends AppCompatActivity {       private WebView webView;       @Override    protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);       webView = findViewById(R.id.webView);    webView.getSettings().setJavaScriptEnabled(true);       webView.addJavascriptInterface(new Object() {    @JavascriptInterface    public void callJavaMethod() {    // Java代码...    }    }, "JavaInterface");       webView.loadUrl("file:///android_asset/index.html");    }   }   

  在JS中,可以使用以下代码来调用Java方法:

  javascript   window.JavaInterface.callJavaMethod();   

  2.

  JS与Java也可以通过WebView提供的evaluateJavascript()方法来实现互调,这种方式需要在JS中执行一段代码,并在Java中处理这段代码的返回值。例如:

  java   public class MainActivity extends AppCompatActivity {       private WebView webView;       @Override    protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);       webView = findViewById(R.id.webView);    webView.getSettings().setJavaScriptEnabled(true);       webView.loadUrl("file:///android_asset/index.html");       webView.evaluateJavascript("callJsMethod()", new ValueCallback<String>() {    @Override    public void onReceiveValue(String value) {    // JS代码的返回值...    }    });    }   }   

  在JS中,可以使用以下代码来执行一段Java代码:

  javascript   window.location.href = "js://callJsMethod";   

  3.

  JS与Java可以通过WebView提供的evaluateJavascript()方法和addJavascriptInterface()方法相结合来实现数据的互传。例如:

  java   public class MainActivity extends AppCompatActivity {       private WebView webView;       @Override    protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);       webView = findViewById(R.id.webView);    webView.getSettings().setJavaScriptEnabled(true);       webView.addJavascriptInterface(new Object() {    @JavascriptInterface    public String callJavaMethod() {    // Java代码...    return "Java数据";    }    }, "JavaInterface");       webView.loadUrl("file:///android_asset/index.html");       webView.evaluateJavascript("callJsMethod()", new ValueCallback<String>() {    @Override    public void onReceiveValue(String value) {    // JS代码的返回值...    Log.d("MainActivity", "JS数据:" + value);    }    });    }   }   

  在JS中,可以使用以下代码来执行一段Java代码并获取返回值:

  javascript   window.JavaInterface.callJavaMethod(function(data) {    // JS代码...    console.log("Java数据:" + data);   });   

  通过以上几种方式,可以实现WebView与JS的通讯,从而实现各种交互效果。