亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

詳解android與HTML混合開發(fā)總結

2024-08-26 00:20:44
字體:
來源:轉載
供稿:網友

現(xiàn)在很多的 APP中會嵌套HTML5的頁面,比如經常變化的等等,有一部分頁面需要原生Java與HTML5中的js進行交互操作,下面介紹一下android中HTML5的使用:

1、關于HTML5種cookie

網頁中可能會用到 用戶信息等很多參數(shù),可以提前把這些信息放到cookie中,可以采用以下方法: 

public static void addCookies(Context context, WebView webView, String url) {    String url=“https://www.xxxx.com/xx/xx/”          String protocol = "";          String authority = "";          try {              URL urlObj = new URL(url);              protocol = urlObj.getProtocol();              authority = urlObj.getAuthority();         } catch (Exception e) {             e.printStackTrace();         }          String ua = webView.getSettings().getUserAgentString();         webView.getSettings().setUserAgentString(Constant.PROJECT_NAME + "/" + ParamHandler.getVersion(context) + "(" + ua + "; HFWSH)");          if (!TextUtils.isEmpty(url) && !TextUtils.isEmpty(protocol) && !TextUtils.isEmpty(authority)) {             if (protocol.equals("https") && authority.indexOf("liepin.com") > -1) {                 CookieSyncManager.createInstance(context);                 CookieManager cookieManager = CookieManager.getInstance();                 cookieManager.setAcceptCookie(true);                 try {                     List<String> data = getCookiesString();                     if (!ListUtils.isEmpty(data)) {                         for (String value : data) {                             cookieManager.setCookie(url, value);                         }                     }                     cookieManager.setCookie(url, "client_id=" + Constant.CLIENT_ID + ";path=/;domain=.XXXX.com");                     cookieManager.setCookie(url, "appVersion=" + Constant .VERSION + ";path=/;domain=.XXXX.com");              CookieSyncManager.getInstance().sync();          } catch (Exception e) {              LogUtils.e("Exception:" + e.getMessage());          }        }      }    }
public List<String> getCookiesString() {      ArrayList data = new ArrayList();      this.clearExpired();      Collection values = this.mCookies.values();      Iterator var3 = values.iterator();        while(var3.hasNext()) {          SwiftCookie c = (SwiftCookie)var3.next();          data.add(c.toCookieString());     }      return data; }

在 mWebView.loadUrl(Url)之前添加cookie,網頁就可以通過cookie取到相應的參數(shù)值了。

2、關于js的安全問題

js在4.2以前有漏洞

通過JavaScript,可以訪問當前設備的SD卡上面的任何東西,甚至是聯(lián)系人信息,短信等。好,我們一起來看看是怎么出現(xiàn)這樣的錯誤的。

1,WebView添加了JavaScript對象,并且當前應用具有讀寫SDCard的權限,也就是:android.permission.WRITE_EXTERNAL_STORAGE

2,JS中可以遍歷window對象,找到存在“getClass”方法的對象的對象,然后再通過反射的機制,得到Runtime對象,然后調用靜態(tài)方法來執(zhí)行一些命令,比如訪問文件的命令.

3,再從執(zhí)行命令后返回的輸入流中得到字符串,就可以得到文件名的信息了。然后想干什么就干什么,好危險。核心JS代碼如下:

 function execute(cmdArgs)    {        for (var obj in window) {            if ("getClass" in window[obj]) {                alert(obj);                return  window[obj].getClass().forName("java.lang.Runtime")                     .getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);            }        }   }   

解決方案:

1,Android 4.2以上的系統(tǒng)

在Android 4.2以上的,google作了修正,通過在Java的遠程方法上面聲明一個@JavascriptInterface,如下面代碼:

class JsObject {      @JavascriptInterface      public String toString() { return "injectedObject"; }   }   webView.addJavascriptInterface(new JsObject(), "injectedObject");   webView.loadData("", "text/html", null);   webView.loadUrl("javascript:alert(injectedObject.toString())");  

2,Android 4.2以下的系統(tǒng)

這個問題比較難解決,但也不是不能解決。

首先,我們肯定不能再調用addJavascriptInterface方法了。關于這個問題,最核心的就是要知道JS事件這一個動作,JS與Java進行交互我們知道,有以下幾種,比prompt, alert等,

這樣的動作都會對應到WebChromeClient類中相應的方法,對于prompt,它對應的方法是onJsPrompt方法,這個方法的聲明如下:

public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) 

通過這個方法,JS能把信息(文本)傳遞到Java,而Java也能把信息(文本)傳遞到JS中,通知這個思路我們能不能找到解決方案呢?

經過一番嘗試與分析,找到一種比較可行的方案,請看下面幾個小點:

【1】讓JS調用一個Javascript方法,這個方法中是調用prompt方法,通過prompt把JS中的信息傳遞過來,這些信息應該是我們組合成的一段有意義的文本,可能包含:特定標識,方法名稱,參數(shù)等。

在onJsPrompt方法中,我們去解析傳遞過來的文本,得到方法名,參數(shù)等,再通過反射機制,調用指定的方法,從而調用到Java對象的方法。

【2】關于返回值,可以通過prompt返回回去,這樣就可以把Java中方法的處理結果返回到Js中。

【3】我們需要動態(tài)生成一段聲明Javascript方法的JS腳本,通過loadUrl來加載它,從而注冊到html頁面中,具體的代碼如下:

javascript:(function JsAddJavascriptInterface_(){        if (typeof(window.jsInterface)!='undefined') {                console.log('window.jsInterface_js_interface_name is exist!!');}         else {            window.jsInterface = {                        onButtonClick:function(arg0) {                     return prompt('MyApp:'+JSON.stringify({obj:'jsInterface',func:'onButtonClick',args:[arg0]}));                },                               onImageClick:function(arg0,arg1,arg2) {                    prompt('MyApp:'+JSON.stringify({obj:'jsInterface',func:'onImageClick',args:[arg0,arg1,arg2]}));               },           };       }   }   )()  

說明:

1,上面代碼中的jsInterface就是要注冊的對象名,它注冊了兩個方法,onButtonClick(arg0)和onImageClick(arg0, arg1, arg2),如果有返回值,就添加上return。

2,prompt中是我們約定的字符串,它包含特定的標識符MyApp:,后面包含了一串JSON字符串,它包含了方法名,參數(shù),對象名等。

3,當JS調用onButtonClick或onImageClick時,就會回調到Java層中的onJsPrompt方法,我們再解析出方法名,參數(shù),對象名,再反射調用方法。

4,window.jsInterface這表示在window上聲明了一個Js對象,聲明方法的形式是:方法名:function(參數(shù)1,參數(shù)2)

3、在html5中進行java和js的交互

1)、方法一:

mWebView.getSettings().setJavaScriptEnabled(true);mWebView.addJavascriptInterface(this, "xxx");

然后在當前類中實現(xiàn)以下方法:

@JavascriptInterface  public void callbackFromH5(final String j) {    //TODO  }

callbackFromH5的名字必須和網頁中的js方法名一樣

Java調用js方法:

mWebView.loadUrl(String.format("javascript:java2js(0)"));//這里是java端調用webview的JS 

js方法名需要和網頁端一直

2)方法二: 

jsbridge方法(https://github.com/lzyzsd/JsBridge)

Android JsBridge 就是用來在 Android app的原生 java 代碼與 javascript 代碼中架設通信(調用)橋梁的輔助工具

1 將jsBridge.jar引入到我們的工程 

Android Studio:

  repositories {  // ...  maven { url "https://jitpack.io" }  }  dependencies {   compile 'com.github.lzyzsd:jsbridge:1.0.4'  }

2、布局文件

<?xml version="1.0" encoding="utf-8"?>    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical" >            <!-- button 演示Java調用web -->        <Button             android:id="@+id/button"           android:layout_width="match_parent"           android:text="@string/button_name"           android:layout_height="dp"           />              <!-- webview 演示web調用Java -->       <com.github.lzyzsd.jsbridge.BridgeWebView           android:id="@+id/webView"           android:layout_width="match_parent"           android:layout_height="match_parent" >        </com.github.lzyzsd.jsbridge.BridgeWebView>      </LinearLayout>  

3、java代碼

//加載服務器網頁            webView.loadUrl("https://www.baidu.com");                //必須和js同名函數(shù)。            webView.registerHandler("submitFromWeb", new BridgeHandler() {                    @Override                public void handler(String data, CallBackFunction function) {                       String str ="html返回給java的數(shù)據:" + data;                                  makeText(MainActivity.this, str, LENGTH_SHORT).show();                      Log.i(TAG, "handler = submitFromWeb, data from web = " + data);                   function.onCallBack( str + ",Java經過處理后:"+ str.substring(,));               }              });           //模擬用戶獲取本地位置           User user = new User();           Location location = new Location();           location.address = "xxx";           user.location = location;           user.name = "Bruce";              webView.callHandler("functionInJs", new Gson().toJson(user), new CallBackFunction() {               @Override               public void onCallBack(String data) {                   makeText(MainActivity.this, "網頁在獲取你的信息", LENGTH_SHORT).show();                  }           });              webView.send("hello");  
webView.callHandler("functionInJs", "data from Java", new CallBackFunction() {                      @Override                   public void onCallBack(String data) {                       // TODO Auto-generated method stub                       Log.i(TAG, "reponse data from js " + data);                   }                  });  

js調用

 var str1 = document.getElementById("text1").value;             var str2 = document.getElementById("text2").value;                   //調用本地java方法               window.WebViewJavascriptBridge.callHandler(                   'submitFromWeb'                   , {'param': str}                   , function(responseData) {                       document.getElementById("show").innerHTML = "send get responseData from java, data = " + responseData                  }              );    //注冊事件監(jiān)聽   document.addEventListener(                      'WebViewJavascriptBridgeReady'                      , function() {                          callback(WebViewJavascriptBridge)                      },                      false                  );    //注冊回調函數(shù),第一次連接時調用 初始化函數(shù)  connectWebViewJavascriptBridge(function(bridge) {              bridge.init(function(message, responseCallback) {                  console.log('JS got a message', message);                  var data = {                      'Javascript Responds': 'Wee!'                  };                  console.log('JS responding with', data);                  responseCallback(data);              });                 bridge.registerHandler("functionInJs", function(data, responseCallback) {                  document.getElementById("show").innerHTML = ("data from Java: = " + data);                  var responseData = "Javascript Says Right back aka!";                  responseCallback(responseData);              });          })  

4、關于webView的優(yōu)化

1、設置WebView 緩存模式

private void initWebView() {                                mWebView.getSettings().setJavaScriptEnabled(true);                mWebView.getSettings().setRenderPriority(RenderPriority.HIGH);                mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);  //設置 緩存模式                // 開啟 DOM storage API 功能                mWebView.getSettings().setDomStorageEnabled(true);                //開啟 database storage API 功能                mWebView.getSettings().setDatabaseEnabled(true);                String cacheDirPath = getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME;       //      String cacheDirPath = getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME;               Log.i(TAG, "cacheDirPath="+cacheDirPath);               //設置數(shù)據庫緩存路徑               mWebView.getSettings().setDatabasePath(cacheDirPath);               //設置  Application Caches 緩存目錄               mWebView.getSettings().setAppCachePath(cacheDirPath);               //開啟 Application Caches 功能               mWebView.getSettings().setAppCacheEnabled(true); 

2、清除緩存

/**            * 清除WebView緩存            */            public void clearWebViewCache(){                                //清理Webview緩存數(shù)據庫                try {                    deleteDatabase("webview.db");                     deleteDatabase("webviewCache.db");               } catch (Exception e) {                   e.printStackTrace();               }                              //WebView 緩存文件               File appCacheDir = new File(getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME);               Log.e(TAG, "appCacheDir path="+appCacheDir.getAbsolutePath());                              File webviewCacheDir = new File(getCacheDir().getAbsolutePath()+"/webviewCache");               Log.e(TAG, "webviewCacheDir path="+webviewCacheDir.getAbsolutePath());                              //刪除webview 緩存目錄               if(webviewCacheDir.exists()){                   deleteFile(webviewCacheDir);               }               //刪除webview 緩存 緩存目錄               if(appCacheDir.exists()){                   deleteFile(appCacheDir);               }           }  

3、在使用WebView加載網頁的時候,有一些固定的資源文件如js/css/圖片等資源會比較大,如果直接從網絡加載會導致頁面加載的比較慢,而且會消耗比較多的流量。所以這些文件應該放在assets里面同app打包。

解決這個問題用到API 11(HONEYCOMB)提供的shouldInterceptRequest(WebView view, String url) 函數(shù)來加載本地資源。

API 21又將這個方法棄用了,是重載一個新的shouldInterceptRequest,需要的參數(shù)中將url替換成了成了request。

比如有一個圖片xxxxx.png,這個圖片已經放在了assets中,現(xiàn)在加載了一個外部html,就需要直接把assets里面的圖片拿出來加載而不需要重新從網絡獲取。當然可以在html里面將圖片鏈接換成file:///android_asset/xxxxx.png,

但是這樣這個html就不能在Android ,ios,WAP中公用了。

webView.setWebViewClient(new WebViewClient() {                    @Override                public WebResourceResponse shouldInterceptRequest(WebView view, String url) {                    WebResourceResponse response = null;                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){                        response = super.shouldInterceptRequest(view,url);                        if (url.contains("xxxxx.png")){                            try {                               response = new WebResourceResponse("image/png","UTF-8",getAssets().open("xxxxx.png"));                           } catch (IOException e) {                               e.printStackTrace();                           }                       }                   }   //                return super.shouldInterceptRequest(view, url);                   return  response;               }                  @TargetApi(Build.VERSION_CODES.LOLLIPOP)               @Override               public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {                   WebResourceResponse response = null;                   response =  super.shouldInterceptRequest(view, request);                   if (url.contains("xxxxx.png")){                       try {                           response = new WebResourceResponse("image/png","UTF-",getAssets().open("xxxxx.png"));                       } catch (IOException e) {                           e.printStackTrace();                       }                   }                   return response;               }   }  

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到HTML教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲国产欧美日韩在线| 亚洲一区电影| 精品国产欧美成人夜夜嗨| 97免费观看视频| 成人网18入口| jizzjizz中文| 一区二区三区欧美精品| 欧美激情在线观看| 狠狠人妻久久久久久综合麻豆| 国产不卡在线观看| 三级毛片电影网站| 久久无码人妻一区二区三区| 欧美精品国产一区| av在线播放一区| 成人h视频在线观看| www在线免费观看| 日本三级日本三级日本三级极| av一本久道久久综合久久鬼色| 午夜成人在线视频| 日韩成人影视| youjizz国产精品| 精品国产依人香蕉在线精品| 国产精品剧情| 国产欧美一区二区精品久导航| 成人av网站在线观看免费| 欧美三级美国一级| 欧美午夜精彩| 蜜桃91麻豆精品一二三区| 天天操天天摸天天舔| 少妇的滋味中文字幕bd| av在线播放天堂| 国产高清在线视频| 91精品视频在线播放| 岛国av一区二区在线在线观看| 国产在线国偷精品产拍免费yy| 高潮按摩久久久久久av免费| av毛片在线看| 国产成人精品亚洲精品| 日韩欧美高清在线播放| 日本欧美一区二区| japanese在线播放| 久久久一二三四| 成人性视频欧美一区二区三区| 999久久久久久| 国产在线视频欧美| 怡红院成永久免费人全部视频| 欧美裸体网站| 亚洲成人一品| 日本一区二区免费看| 亚洲一区二区在线播放| 亚洲精品丝袜日韩| 中文字幕av日韩精品| 日本韩国在线不卡| xxxxhd欧美精品| 在线观看h视频| 艳女tv在线观看国产一区| 中文字幕字幕中文在线中不卡视频| 好吊色视频一区二区| 国产精品网址在线| 国产精品 日产精品 欧美精品| 免费视频亚洲| av在线私库| 黄色一级视频免费看| 久久精品国产清高在天天线| 久久国产视频网站| 很黄很污的视频网站| 91黑人精品一区二区三区| 欧美日韩的一区二区| 4438x成人网最大色成网站| 久久免费激情视频| 丁香综合五月| 久久国产成人精品国产成人亚洲| 好吊的妞视频这里都有| 欧美一区二区三区在线电影| 国产精品制服诱惑| 性欧美video视频另类| 成av人电影在线观看| 日韩大片在线免费观看| eeuss影院www在线播放| 22288色视频在线观看| 成年人黄色片视频| 丁香啪啪综合成人亚洲小说| 超碰97国产精品人人cao| 亚洲精品成人无码| 成人在线视频网| 成入视频在线观看| 久88久久88久久久| 97视频国产在线| 欧美激情黄色片| 国产精品日韩欧美综合| 精品91久久| 黄色大片在线| 国产精品传媒在线| 摸摸摸bbb毛毛毛片| 日韩黄色高清视频| 久久久一区二区三区捆绑**| 国产美女三级视频| sm在线观看| 我不卡手机影院| 丝袜亚洲另类丝袜在线| wwwwww在线观看| 精品少妇一区二区三区免费观| aa亚洲婷婷| 菠萝蜜网站在线观看| 日韩欧美亚洲国产另类| 亚洲电影在线免费观看| 国产精品久久久久久久免费大片| 涩涩漫画在线观看| 911国产精品| 国产精品久久a| 一区二区三区美女视频| 欧美久久一区二区| 免费在线黄色电影| www.男人天堂网| 狠狠色噜噜狠狠狠狠888奇米| 免费国产在线精品一区二区三区| www.狠狠| 99re在线播放| 免费在线黄色网| 国产精品高清一区二区三区| 亚洲第一黄色| 欧美一区二区三区精美影视| 日本免费网站在线观看| 欧美在线免费观看亚洲| 国产成人av在线| 九九热精品在线播放| 丁香综合av| 亚洲成人手机在线观看| 视频一区二区三区中文字幕| 国产99re| 久久综合给合久久狠狠狠97色69| 在线日韩av片| 色一情一乱一伦一区二区三区丨| 91美女片黄在线观| 99热在线观看免费| 亚洲毛片在线观看.| 性欧美大战久久久久久久| 久久久久资源| 91丨国产丨九色丨pron| 国产美女网站在线观看| 美女久久久精品| 婷婷四月色综合| 中文字幕亚洲综合| 国产成人精品午夜| 国产精品视频自在线| 日韩欧美专区在线| 欧美日韩亚洲一区三区| 免费不卡av| 久久亚洲精精品中文字幕| 国产中文字幕第一页| 国产精品久久免费| 亚洲五月综合| 久久影院午夜精品| 手机看片国产1024| 色综合天天狠天天透天天伊人| 久久久久久9999| 懂色一区二区三区| 虎白女粉嫩尤物福利视频| 中文字幕亚洲乱码熟女1区2区| 成人黄色a**站在线观看| 99热这里只有精品7| 丰满岳乱妇dvd日本| 亚洲一区 视频| 3751色影院一区二区三区| av电影一区二区三区| 91九色鹿精品国产综合久久香蕉| 精品久久久久久久久久久国产字幕| eeuss影院在线观看| 亚洲精品一区二区三区在线| 日韩av综合在线观看| 亚洲第一二区| 日本一区二区三区免费看| 久久国产精品电影| 亚洲美女屁股眼交| 国产女主播福利| 午夜免费电影一区在线观看| 山东少妇露脸刺激对白在线| 日本韩国欧美一区二区三区| xxx在线免费观看| 99久久国产宗和精品1上映| 男女羞羞视频在线观看| 好吊成人免视频| 狠狠躁18三区二区一区| 国产精品美女www| 国产无遮挡又黄又爽又色视频| 91精品综合久久久久久久久久久| 日韩精品免费一区二区夜夜嗨| 国产精品久久久久久久第一福利| 高潮白浆女日韩av免费看| 在线国产99| 在线天堂www在线国语对白| 人偷久久久久久久偷女厕| 国产91对白在线观看九色| 精品一级视频| av不卡免费电影| 国产精品入口免费| 国产拍欧美日韩视频二区| 亚洲国产精品久久网午夜小说| 色哟哟精品观看| 久久机热这里只有精品| 99久久精品免费看国产免费软件| 老司机深夜福利在线观看| 国产精品亚洲天堂| 久久电影一区二区| 久久久99精品免费观看不卡| 香蕉国产在线视频| 日韩视频免费中文字幕| 亚洲成年人影院在线| 78色国产精品| 亚洲九九视频| 免费观看30秒视频久久| 成人欧美一区二区三区的电影| 久久久av毛片精品| 黄色大片在线播放| 黄色激情视频在线观看| 影音先锋在线一区| 男人添女荫道口女人有什么感觉| 日韩在线国产精品| 精品国产乱码91久久久久久网站| 成人黄色片视频| 色狠狠一区二区三区香蕉| 超碰在线公开97| 日本a级片在线播放| 亚洲色婷婷综合开心网| 91免费观看| swag国产精品一区二区| 久久久久无码国产精品不卡| 尤物yw午夜国产精品视频| 大桥未久女教师av一区二区| 日韩一级片av| 美女视频一区二区| 国产精品极品美女在线观看| 日本一区视频在线观看| 好好的日comwww| 亚洲精品四区| 91在线网站| 国产综合色在线观看| 日韩中文字幕无砖| 综合欧美视频一区二区三区| 精品视频一区二区在线观看| 色在线中文字幕| 国产欧美精品一区aⅴ影院| 国产在线观看免费麻豆| 视频在线观看免费影院欧美meiju| 日韩激情综合网| 亚洲视屏在线播放| 精品国产伦一区二区三区观看方式| 欧美黑人一区二区| 成人永久免费网站| 17c丨国产丨精品视频| 国产av一区二区三区精品| 久久婷婷综合色| 亚洲福利影院| 亚洲奶水xxxx哺乳期| 99国产精品免费| 国产精品国产自产拍在线| 欧美日韩一区二区三区电影| 国产欧美精品在线| 成人av在线播放| 在线视频中文字幕久| 国产一区二区成人久久免费影院| 久久综合九色九九| 国产精品第一视频| 激情aⅴ欧美一区二区欲海潮| 日本午夜在线视频| 欧美亚洲另类久久综合| 久久国产欧美| 精品女厕一区二区三区| www.亚洲人.com| 欧美小视频在线观看| 国产一起色一起爱| 在线一级视频| 成人在线免费播放视频| 国产不卡精品一区二区三区| 日本不卡视频在线观看| 免费黄漫在线观看| wwwxxx在线观看| 色综合一个色综合亚洲| 777奇米888色狠狠俺也去| 亚洲精品国产成人久久av盗摄| 日本一卡二卡在线| 男同互操gay射视频在线看| 经典一区二区三区| 亚洲精品国久久99热| 亚洲国产成人在线视频| 欧美激情91| 日本一区二区高清视频| 免费网站观看www在线观| 欧美色视频免费| www.久久| 久久九九全国免费精品观看| 俄罗斯毛片基地| 五月天婷婷综合社区| 国产精品色眯眯| 一区在线中文字幕| 91超碰在线电影| 日韩午夜激情电影| 亚洲毛片在线免费观看| 国产精品久久久久久免费观看| 国产一区视频导航| 国产小视频在线播放| 香蕉视频免费在线播放| www.激情.com| 久久久www成人免费毛片麻豆| 欧美日韩一区二区三区四区不卡| 日本高清好狼色视频| 一区二区久久久久久| av一区在线观看| 精品1卡二卡三卡四卡老狼| 精品久久一区二区| 91丨精品丨国产| 男人的天堂久久| 亚洲国产精品网站| 手机看片一区二区三区| 色吧影院999| caoporn成人免费视频在线| 水野朝阳av一区二区三区| 日韩成人精品在线| gogogo高清在线观看一区二区| 欧美白人猛性xxxxx交69| 91九色蝌蚪porny| 国产精品欧美久久久久天天影视| 国产一区二区在线看| 国产成人99久久亚洲综合精品| 欧美日韩国产一区二区三区| 国产区在线观看| 91视频福利网| 人妻av一区二区三区|