WebView
的 evaluateJavascript
方法可以实现与JavaScript的交互。
1、使用WebView加载网页
初始化WebView:在布局文件中添加一个WebView组件,并在Activity或Fragment中初始化WebView。
启用JavaScript:确保WebView启用了JavaScript支持,这是与JS交互的前提。
加载网页内容:WebView可以加载本地的HTML文件或远程的网页,这里以加载本地HTML文件为例,通过webView.loadUrl("file:///android_asset/sample.html");
加载本地HTML文件。
2、通过JavaScript接口进行交互
定义JavaScript接口:创建一个类(如WebAppInterface),并使用@JavascriptInterface注解来暴露给WebView。
向WebView添加JavaScript接口:通过webView.addJavascriptInterface(new WebAppInterface(this), "Android");
将接口添加到WebView中。
在JavaScript中调用接口方法:在JavaScript代码中,可以通过“Android”对象调用接口中的方法。
3、在JavaScript中定义方法
在HTML文件的<script>标签中编写JavaScript代码来定义方法,定义一个名为showAlert的函数,用于显示弹窗。
4、在Android代码中调用JavaScript方法
调用JavaScript方法:使用webView.evaluateJavascript("showAlert('Hello from Android')", new ValueCallback<String>() {...});
来调用JavaScript中的showAlert方法。
处理返回值:由于evaluateJavascript方法是异步执行的,执行结果会通过ValueCallback接口返回,可以在onReceiveValue方法中处理返回值。
1、布局文件activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
2、MainActivity.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); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.loadUrl("file:///android_asset/sample.html"); Button btn = findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { testJS(); } }); } @SuppressLint("SetJavaScriptEnabled") public void testJS() { webView.evaluateJavascript("showAlert('Hello from Android')", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Log.d("TAG", "JavaScript返回值: " + value); } }); } }
3、sample.html(位于assets文件夹下)
<!DOCTYPE html> <html> <head> <title>Sample</title> <script type="text/javascript"> function showAlert(message) { alert(message); } </script> </head> <body> <button onclick="callAndroid()">Call Android Method</button> </body> </html>
1、问:如何在Android中调用JavaScript的多个参数方法?
答:可以使用webView.evaluateJavascript("yourJavaScriptFunction('param1', 'param2')", new ValueCallback<String>() {...});
的方式传递多个参数给JavaScript方法。
2、问:如何确保Android与JS之间的交互安全?
答:在使用addJavascriptInterface方法时,需要注意安全性问题,特别是在加载远程网页时,可能会存在跨站脚本攻击的风险,为了提高安全性,可以使用@JavascriptInterface注解,并限制接口方法的访问范围。