在Android应用开发中,监听和调用JavaScript代码是一项常见的需求,通过WebView组件,Android可以实现与网页内容的交互,从而调用JavaScript方法或响应JavaScript事件,下面将详细介绍如何在Android中监听和调用JavaScript方法:
一、Android调用JavaScript方法
1. 使用loadUrl()
方法
步骤:将需要调用的JavaScript代码放入HTML文件中,并通过WebView
加载该文件,在Android代码中通过loadUrl()
方法调用JavaScript函数。
示例:假设有一个名为javascript.html
的文件,其中包含一个名为callJS()
的JavaScript函数,当用户点击Android按钮时,调用该JavaScript函数。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Carson_Ho</title> <script> function callJS(){ alert("Android调用了JS的callJS方法"); } </script> </head> </html>
public class MainActivity extends AppCompatActivity { WebView mWebView; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); mWebView.loadUrl("file:///android_asset/javascript.html"); button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mWebView.post(new Runnable() { @Override public void run() { mWebView.loadUrl("javascript:callJS()"); } }); } }); } }
2. 使用evaluateJavascript()
方法
步骤:直接在Android代码中使用evaluateJavascript()
方法执行JavaScript代码,并获取返回值(如果有)。
示例:
mWebView.evaluateJavascript("javascript:alertTest()", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Toast.makeText(WebViewActivity.this, value, Toast.LENGTH_SHORT).show(); } });
二、JavaScript调用Android方法
1. 使用addJavascriptInterface()
方法
步骤:在Android中创建一个类,并将其实例添加到WebView中,然后在JavaScript中通过映射的名称调用该类的方法。
示例:
public class JSTest { private Context mContext; public JSTest(Context context) { mContext = context; } @JavascriptInterface public void showToast(String str) { Toast.makeText(mContext, str, Toast.LENGTH_SHORT).show(); } } public class MainActivity extends AppCompatActivity { WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new JSTest(this), "JsTest"); mWebView.loadUrl("file:///android_asset/index.html"); } }
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>我的页面</title> </head> <body> <p>Android Java JS 交互测试</p> <button onclick="showToast()">调用Java方法</button> <script type="application/javascript"> function showToast() { JsTest.showToast("来自Web调用"); } </script> </body> </html>
2. 使用shouldOverrideUrlLoading()
方法
步骤:在WebViewClient
中重写shouldOverrideUrlLoading()
方法,拦截特定的URL请求并处理。
示例:
mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.equals("file:///android_asset/test2.html")) { Log.e(TAG, "shouldOverrideUrlLoading: " + url); startActivity(new Intent(MainActivity.this, Main2Activity.class)); return true; } else { mWebView.loadUrl(url); return true; } } });
3. 使用WebChromeClient
回调方法
步骤:通过重写WebChromeClient
中的onJsAlert()
,onJsConfirm()
, 和onJsPrompt()
方法来拦截和处理JavaScript对话框事件。
示例:
mWebView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this); b.setTitle("Alert"); b.setMessage(message); b.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }); b.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); b.create().show(); return true; } });
三、相关问题与解答
1. Android如何通过WebView调用JavaScript方法?
答:可以通过两种方式调用JavaScript方法:使用loadUrl()
方法和使用evaluateJavascript()
方法,具体实现可以参考上述“Android调用JavaScript方法”部分。
2. JavaScript如何通过WebView调用Android方法?
答:可以通过三种方式调用Android方法:使用addJavascriptInterface()
进行对象映射、使用shouldOverrideUrlLoading()
方法拦截URL请求、以及使用WebChromeClient
的回调方法拦截JavaScript对话框消息,具体实现可以参考上述“JavaScript调用Android方法”部分。
各位小伙伴们,我刚刚为大家分享了有关“android监听js方法”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/636565.html