1. 在 WebView 中启用 JavaScript:
确保在 WebSettings 中启用 JavaScript:
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
2. 在 WebView 中设置 JavaScript 接口对象:
创建一个 Java 对象,并通过 addJavascriptInterface 方法将其暴露给 JavaScript:
public class WebAppInterface {
@JavascriptInterface
public void showToast(String message) {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
// 在 Activity 中设置 JavaScript 接口
WebAppInterface webAppInterface = new WebAppInterface(this);
webView.addJavascriptInterface(webAppInterface, "Android");
在上述代码中,WebAppInterface 类包含一个用于在 Android 应用中显示 Toast 的方法。这个类通过 addJavascriptInterface 方法注册到 WebView 中,其中 "Android" 是 JavaScript 中访问这个接口的名称。
3. 在 JavaScript 中调用 Java 方法:
在 JavaScript 中通过 Android.showToast("Hello from JavaScript!"); 调用 Java 方法:
<!DOCTYPE html>
<html>
<head>
<title>JavaScript and WebView Interaction</title>
<script type="text/javascript">
function callAndroid() {
Android.showToast("Hello from JavaScript!");
}
</script>
</head>
<body>
<button onclick="callAndroid()">Call Android</button>
</body>
</html>
在这个例子中,当按钮被点击时,JavaScript 函数 callAndroid 调用了在 Android 中定义的 showToast 方法。
完整示例:
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
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);
// 启用 JavaScript
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
// 添加 JavaScript 接口
WebAppInterface webAppInterface = new WebAppInterface(this);
webView.addJavascriptInterface(webAppInterface, "Android");
// 加载 HTML 文件
webView.loadUrl("file:///android_asset/index.html");
// 设置 WebViewClient,使网页在 WebView 中打开
webView.setWebViewClient(new WebViewClient());
}
// JavaScript 接口类
public class WebAppInterface {
@JavascriptInterface
public void showToast(String message) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
}
}
在这个示例中,WebAppInterface 类包含一个 showToast 方法,当在 JavaScript 中调用时,它会显示一个 Android 的 Toast。这个类通过 addJavascriptInterface 注册到 WebView 中,可以在 WebView 加载的 HTML 文件中使用 JavaScript 访问这个接口。在 onCreate 方法中,我们加载了一个 HTML 文件并启用了 JavaScript。点击按钮后,JavaScript 函数调用了 Android 中的方法,显示了 Toast。
转载请注明出处:http://www.zyzy.cn/article/detail/15201/Android