在 Android 中,通过 WebView 与 JavaScript 进行交互是一项常见的任务。这种交互方式使得 Android 应用能够与 WebView 中加载的网页进行数据传递和相互调用。以下是基本的 WebView 和 JavaScript 交互的步骤:

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.pingtaimeng.com/article/detail/15201/Android