久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android WebView在API17后addJavascriptInterface方法無效

 wusiqi111 2019-07-08

https://blog.csdn.net/u012721519/article/details/79173377

Webview是Android平臺(tái)中一個(gè)重要組件,,通常是通過在Activity中嵌套一個(gè)簡(jiǎn)單瀏覽器,實(shí)現(xiàn)在線網(wǎng)頁瀏覽的功能或者實(shí)現(xiàn)Android與JavaScript的通信,,此時(shí)addJavascriptInterface方法就顯得尤為重要,。但熟悉的人應(yīng)該會(huì)有所發(fā)現(xiàn),在API 17以后,,addJavascriptInterface方法就失效了,,下面將詳細(xì)的介紹addJavascriptInterface方法以及失效解決方法。

一,、 addJavascriptInterface簡(jiǎn)介

addJavascriptInterface是WebKit的原生API,屬于WebView對(duì)象的公共方法,,用于暴露一個(gè)java對(duì)象給js,,使得js可以直接調(diào)用方法。當(dāng)然,,java與js的相互調(diào)用也離不開loadUrl()方法的配合使用,。但是addJavascriptInterface的使用也是有些問題,,因?yàn)锳ndroid平臺(tái)封裝WebKit內(nèi)核時(shí),不同的版本中會(huì)有些不一致,。

二,、網(wǎng)頁內(nèi)容

1. HTML代碼

  1. <html>

  2. <head>

  3. <meta charset="gb-2312">

  4. <title>無標(biāo)題文檔</title>

  5. <link href="http://code./mobile/1.0/jquery.mobile-1.0.min.css" rel="stylesheet" type="text/css">

  6. <script src="http://code./jquery-1.6.4.min.js" type="text/javascript"></script>

  7. <script src="http://code./mobile/1.0/jquery.mobile-1.0.min.js" type="text/javascript"></script>

  8. </head>

  9. <body>

  10. <div data-role="page" id="page">

  11. <div data-role="header">

  12. <h1>標(biāo)題</h1>

  13. </div>

  14. <div data-role="content">

  15. <ul data-role="listview" data-inset="true">

  16. <li data-role="list-divider">

  17. 注冊(cè)

  18. </li>

  19. <li>

  20. <div data-role="fieldcontain">

  21. <label for="username">用戶名:</label>

  22. <input type="text" name="textinput" id="username" value="張三" />

  23. </div></li><li>

  24. <div data-role="fieldcontain">

  25. <label for="password">密碼:</label>

  26. <input type="password" name="textinput" id="password" value="zhangsan" />

  27. </div></li><li>

  28. <div data-role="fieldcontain">

  29. <fieldset data-role="controlgroup" data-type="horizontal">

  30. <legend>性別:</legend>

  31. <input type="radio" name="radio1" id="man" value="0" />

  32. <label for="man"></label>

  33. <input type="radio" name="radio1" id="woman" value="1" />

  34. <label for="woman"></label>

  35. </fieldset>

  36. </div></li><li>

  37. <div data-role="fieldcontain">

  38. <fieldset data-role="controlgroup" data-type="horizontal">

  39. <legend>愛好</legend>

  40. <input type="checkbox" name="checkbox1" id="football" class="custom" value="0" />

  41. <label for="football">足球</label>

  42. <input type="checkbox" name="checkbox1" id="basketball" class="custom" value="1" />

  43. <label for="basketball">籃球</label>

  44. <input type="checkbox" name="checkbox1" id="vollyball" class="custom" value="2" />

  45. <label for="vollyball">排球</label>

  46. </fieldset>

  47. </div>

  48. </li>

  49. <li>

  50. <div data-role="fieldcontain">

  51. <label for="selectmenu" class="select">國籍:</label>

  52. <select name="selectmenu" id="selectmenu">

  53. <option value="China">中國</option>

  54. <option value="America">美國</option>

  55. <option value="Japan">日本</option>

  56. </select>

  57. </div>

  58. </li>

  59. <li>

  60. <button id="commit">提交</button>

  61. </li>

  62. </ul>

  63. </div>

  64. <div data-role="footer" data-position="fixed">

  65. <h4>腳注</h4>

  66. </div>

  67. </div>

  68. </body>

  69. </html>

2.JS代碼

  1. <script>

  2. $(function(){

  3. $("#commit").click(function(){

  4. var result = "{";

  5. result +="\"username\":\"";

  6. result +=$("#username").val();

  7. result +="\",\"password\":\"";

  8. result +=$("#password").val();

  9. result += "\",\"gender\":\"";

  10. result += $('input[name="radio1"]:checked').val();

  11. result += "\",\"interest\":\"";

  12. $('input[name="checkbox1"]:checked').each(function() {

  13. result += $(this).val()+",";

  14. });

  15. result += "\",\"country\":\"";

  16. result += $("#selectmenu option:selected").text()+"\"}";

  17. register_js.register(result);

  18. });

  19. });

  20. </script>

3.實(shí)現(xiàn)效果圖

 

三、API 17以前addJavascriptInterface的使用方法

1.獲取網(wǎng)頁

  1. wv = (WebView) this.findViewById(R.id.wv1);

  2. wv.getSettings().setJavaScriptEnabled(true);

  3. wv.loadUrl("file:///android_asset/index.html");

  4. wv.addJavascriptInterface(new JSInterface(), "register_js")

register_js為交互時(shí)相互定義的名字,。

2.JS中調(diào)用方法在Android中響應(yīng)

  1. public void register(String userInfo){

  2. Toast.makeText(MainActivity.this, userInfo, Toast.LENGTH_LONG).show();

  3. }

register方法為js中調(diào)用的方法名,,與addJavascriptInterface相對(duì)應(yīng)。具體可參照J(rèn)avaScript的代碼,。

四,、API 17以后addJavascriptInterface的使用方法

1. 獲取網(wǎng)頁

  1. wv = (WebView) this.findViewById(R.id.wv1);

  2. wv.getSettings().setJavaScriptEnabled(true);

  3. wv.loadUrl("file:///android_asset/index.html");

  4. wv.addJavascriptInterface(new JSInterface(), "register_js")

2.JS中調(diào)用方法在Android中響應(yīng)

  1. public void register(String userInfo){

  2. Toast.makeText(MainActivity.this, userInfo, Toast.LENGTH_LONG).show();

  3. }

3.注意

需要添加注解,否則addJavascriptInterface方法會(huì)失效,。

  1. @SuppressLint("JavascriptInterface")

  2. @JavascriptInterface

4.方法更換原因

Android4.2以前WebView 提供了javascript 調(diào)用Java代碼的方法,,會(huì)造成很大的安全漏洞。Android官方在API 17后,,限制javascript代碼只能調(diào)用聲明了@JavascriptInterface 注解的Java方法,。

所以必須要給每個(gè)可供js代碼調(diào)用的Java方法加一個(gè)@JavascriptInterface接口。

五,、MainActivity.java代碼

  1. package com.example.administrator.addjavascriptinterfacefunctiontest;

  2. import android.annotation.SuppressLint;

  3. import android.app.Activity;

  4. import android.content.Intent;

  5. import android.support.v7.app.AppCompatActivity;

  6. import android.os.Bundle;

  7. import android.webkit.JavascriptInterface;

  8. import android.webkit.WebView;

  9. import android.widget.Toast;

  10. public class MainActivity extends Activity {

  11. private WebView wv;

  12. @SuppressLint("JavascriptInterface")

  13. @Override

  14. protected void onCreate(Bundle savedInstanceState) {

  15. super.onCreate(savedInstanceState);

  16. setContentView(R.layout.activity_main);

  17. wv = (WebView) this.findViewById(R.id.wv1);

  18. wv.getSettings().setJavaScriptEnabled(true);

  19. wv.loadUrl("file:///android_asset/index.html");

  20. wv.addJavascriptInterface(new JSInterface(), "register_js");

  21. }

  22. private final class JSInterface{

  23. @SuppressLint("JavascriptInterface")

  24. @JavascriptInterface

  25. public void register(String userInfo){

  26. Toast.makeText(MainActivity.this, userInfo, Toast.LENGTH_LONG).show();

  27. }

  28. }

  29. }

六,、源碼下載

地址:http://download.csdn.net/download/u012721519/10225784

Good luck!

Write by Jimmy.li

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多