zoukankan      html  css  js  c++  java
  • Android Webview 与JS交互

    Android中 WebView控件支持JS与本地代码的交互。

    // 是否允许在webview中执行javascript
    webSettings.setJavaScriptEnabled(true);
    //添加JS的接口名称
    mWebView.addJavascriptInterface(this, "mobiletojs");

      其主要分为两类:

        1:JS调用本地代码

           通过window.mobiletojs.saveLogin(username, password);

           mobiletojs 对应 mWebView.addJavascriptInterface(this, "mobiletojs"); 中的接口名称

        2:本地代码调用JS

           在Activity中实现方法调用 mWebView.loadUrl("javascript:setUsername('ddd')");   即可实现对JS:设置用户名方法的调用

    //Android 本地代码

     1 package com.whroid.commonapp.ui;
     2 
     3 import android.annotation.SuppressLint;
     4 import android.app.Activity;
     5 import android.os.Bundle;
     6 import android.util.Log;
     7 import android.webkit.WebSettings;
     8 import android.webkit.WebView;
     9 
    10 @SuppressLint("JavascriptInterface")
    11 public class WebViewJSUI extends Activity {
    12     public static final String TAG = "WebViewJSUI";
    13     private WebView mWebView;
    14 
    15     @Override
    16     public void onCreate(Bundle savedInstanceState) {
    17         super.onCreate(savedInstanceState);
    18         mWebView = new WebView(this);
    19         setContentView(mWebView);
    20         WebSettings webSettings = mWebView.getSettings();
    21         // 是否允许在webview中执行javascript
    22         webSettings.setJavaScriptEnabled(true);
    23         // 为JS添加本地调用的接口 名称
    24         mWebView.addJavascriptInterface(this, "mobiletojs");
    25         // 加载网页
    26         mWebView.loadUrl("file:///android_asset/test_webview_js.html");
    27     }
    28 
    29     //页面点击登录时 由页面调用
    30     public void saveLogin(String username,String password)
    31     {
    32         Log.w(TAG, "调用登录:onLoin:"+username+" password:"+password);
    33     }
    34     //由代码调用页面js,实现对页面的编辑
    35     public void setUsername()
    36     {
    37         mWebView.loadUrl("javascript:setUsername('ddd')");
    38     }
    39     public String getUsername()
    40     {
    41         return "来自android 的用户名";
    42     }
    43     public String getPassword()
    44     {
    45         return "mobile password";
    46     }
    47 }

    //对应的页面,以及相应的JS

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4 <meta name="generator"
     5     content="HTML Tidy for HTML5 (experimental) for Windows https://github.com/w3c/tidy-html5/tree/c63cc39" />
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     7 <title>title</title>
     8 <script language="javascript">
     9     function onLogin() {
    10         var username = document.getElementById("username").value;
    11         var password = document.getElementById("password").value;
    12 
    13         var userAgent = navigator.userAgent;
    14         var index = userAgent.indexOf("Android");
    15         if (index > 0) {
    16             window.mobiletojs.saveLogin(username, password);
    17         }
    18     }
    19 
    20     function setUsername(name) {
    21         document.getElementById("username").value = name;
    22     }
    23 
    24     function onInit() {
    25 
    26         var userAgent = navigator.userAgent;
    27         var index = userAgent.indexOf("Android");
    28         if (index > 0) {
    29             //调用android或者ios本地方法,获取用户名或密码
    30             var username = window.mobiletojs.getUsername();
    31             var password = window.mobiletojs.getPassword();
    32             document.getElementById("username").value = username;
    33             document.getElementById("password").value = password;
    34         }
    35 
    36     }
    37 
    38     //页面开始加载时,触发
    39     if (document.readyState == "complete") {
    40         onInit()
    41     } else {
    42         document.onreadystatechange = function() {
    43 
    44             if (document.readyState == "complete") {
    45                 onInit()
    46             }
    47         }
    48     }
    49 </script>
    50 </head>
    51 <body style="background-color: #ff0;">
    52     <table width="400" align="center">
    53         <tr>
    54             <td><input type="text" value="username" id="username" />
    55             </td>
    56             <input type="text" value="password" id="password" />
    57             <td></td>
    58         </tr>
    59         <tr>
    60             <td>
    61                 <div id="output">test</div> <input type="submit" value="提交"
    62                 onclick="onLogin()" /> <br />
    63                 <table width="400" align="center"></table>
    64             </td>
    65         </tr>
    66     </table>
    67 </body>
    68 
    69 </html>
  • 相关阅读:
    Python之二维数组(list与numpy.array)
    too many values to unpack
    python 寻找可迭代(list)的目标元素的下表方法
    zip函数
    map函数
    Sokcet代码错误类型
    PL-VIO Docker测试
    如何检索国外博士论文
    EuRoc V203数据集的坑
    Tracking of Features and Edges
  • 原文地址:https://www.cnblogs.com/whroid/p/3556226.html
Copyright © 2011-2022 走看看