android JS 互相調用

public class SystemWebView extends Activity {
    Button button;
    WebView webView ;
    WebSettings webSetting;



    @JavascriptInterface
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_system_webview);
        
        button = (Button)findViewById(R.id.button);
        webView = (WebView)findViewById(R.id.webView);
        //加載網頁
        webView.loadUrl("file:///android_asset/hello.html");
        WebSettings settings = webView.getSettings();
        settings.setDefaultTextEncodingName("GBK");//設置字符編碼
        settings.setJavaScriptEnabled(true); //網頁是否允許JS運行

        //給js window 添加子節點,方便js調用android 方法,子節點名爲JsCallAndroid
        webView.addJavascriptInterface(new JSCallAndroid(), "JsCallAndroid");
        
        //覆蓋WebView默認使用第三方或系統默認瀏覽器打開網頁的行爲,使網頁用WebView打開
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub
                //對網頁中超鏈接的打開,返回值是true的時候控制用WebView打開,爲false調用系統瀏覽器或第三方瀏覽器
                view.loadUrl(url);
                return true;
            }
        });

        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsAlert(WebView view, String url, String message,
                                     JsResult result) {
                // TODO Auto-generated method stub
                return super.onJsAlert(view, url, message, result);
            }
        });

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                webView.loadUrl("javascript: showFromHtml2('android said:')");
            }
        });
    }

    class JSCallAndroid{
        @JavascriptInterface
        public void htmlCallAndroid(){
            Uri smsToUri = Uri.parse("smsto:");

            Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri);

            intent.putExtra("sms_body", "網頁使用發短信");

            startActivity(intent);
        }

        @JavascriptInterface
        public String  htmlCallAndroid2(final String str){
            Gson gson = new Gson();
            JSONObject jsonObject = null;
            try {
                jsonObject = new JSONObject(str);
                String name = jsonObject.getString("name");
                String password = jsonObject.getString("password");
                return "{\"name\":" + name + " turn," + "\"password\":"+ password + " turn}";
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }
    }

}


       
html 網頁
<!doctype html>
<html lang="en">
 <head>
  <meta charset="GBK">
  <title>Document</title>
  <script>
  function showFromHtml2(param){
     alert(param + "我調用");
  }

  function subInput(){
      var name = document.getElementById("name").value;
      var password = document.getElementById("password").value;
      var str = '{"name":"' + name + '","password":"' + password +'"}';
      //調用android 的方法
      var str2 = window.JsCallAndroid.htmlCallAndroid2(str);
      alert(str2);
  }

  function sendMsg(){
        //調用android的方法
      window.JsCallAndroid.htmlCallAndroid();
  }
  </script>
 </head>
 <body>

  <form>
   用戶名:<input id="name" type="email" name="email"/>
   <br/>
   密碼: <input id="password" type="text" name="password"/>
   </br>
   <input type="submit" value="提交" οnclick="subInput()"/>
    <input type="button" value="調用發短信頁面" οnclick="sendMsg()"/>
  </form>
 </body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章