如何在Android中监听JavaScript方法?

在Android应用开发中,监听和调用JavaScript代码是一项常见的需求,通过WebView组件,Android可以实现与网页内容的交互,从而调用JavaScript方法或响应JavaScript事件,下面将详细介绍如何在Android中监听和调用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方法

如何在Android中监听JavaScript方法?

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对话框事件。

如何在Android中监听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

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-11-09 22:00
Next 2024-11-09 22:07

相关推荐

  • 虚拟主机服务器配置怎么选择

    虚拟主机服务器配置的选择需要考虑多个因素,例如操作系统、空间大小、流量大小等。选择合适的操作系统和空间大小可以提高网站的访问速度和稳定性。流量大小也会影响虚拟主机的配置,因为它取决于访问次数和网页大小。

    2024-01-03
    0121
  • 服务器状态不匹配什么意思呀

    服务器状态不匹配通常表示客户端和服务器之间的通信出现了问题,可能是由于网络延迟、数据包丢失等原因导致的。

    2024-04-15
    0129
  • Github:促进开源文化和软件创新的平台「github 开源」

    Github是一个基于git的版本控制工具,同时也是一个开源社区和协作平台,它为全球的开发者提供了一个共享代码、协作开发、学习交流的空间,Github的出现,极大地推动了开源文化的发展,也促进了软件创新的进程。Github是开源文化的重要推动者,在Github上,任何人都可以创建自己的项目,分享自己的代码,让全世界的人都能看见,这种开……

    2023-11-15
    0161
  • 不用备案的国内服务器

    在国内,服务器的备案是一项必要的操作,但对于一些小型网站或者个人开发者来说,备案的过程可能会显得繁琐且耗时,很多人会选择使用无需备案的高防服务器,什么是高防服务器?

    2023-12-20
    0115
  • 云服务器 租用

    云服务器租用搭建网站的好处有哪些随着互联网的快速发展,越来越多的企业和个人开始关注网站建设,而云服务器租用作为一种新型的建站方式,受到了越来越多人的青睐,云服务器租用搭建网站到底有哪些好处呢?本文将从以下几个方面进行详细的介绍。灵活性高云服务器租用的最大优势就是灵活性高,用户可以根据自己的需求随时增加或减少服务器资源,无需担心硬件设备……

    2024-01-16
    0223
  • 腾讯云服务器可以干嘛

    腾讯云服务器可以干嘛随着互联网的普及和发展,云计算已经成为了企业和个人获取计算资源的重要方式,腾讯云作为国内领先的云服务提供商,提供了丰富的云服务器产品,帮助企业和个人轻松搭建稳定、高效的应用系统,腾讯云服务器到底可以干嘛呢?本文将从以下几个方面进行详细的技术介绍。1、网站建设腾讯云服务器可以用于搭建各种类型的网站,如企业官网、电商网……

    2024-01-23
    0209

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入