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>
  • 相关阅读:
    (Java实现) 洛谷 P1106 删数问题
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1106 删数问题
    目测ZIP的压缩率
  • 原文地址:https://www.cnblogs.com/whroid/p/3556226.html
Copyright © 2011-2022 走看看