WebView与JS的通讯机制
2023-12-10 00:06:35
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的通讯,从而实现各种交互效果。