国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

JSBridge原理解析——以WebviewJavascriptBridge實現(xiàn)方式為例

共 17255字,需瀏覽 35分鐘

 ·

2021-06-26 22:10

一、什么是 JSBridge?

JSBridge 是一種 webview 側(cè)和 native 側(cè)進行通信的手段,webview 可以通過 jsb 調(diào)用 native 的能力,native 也可以通過 jsb 在 webview 上執(zhí)行一些邏輯。

二、JSB 的實現(xiàn)方式

在比較流行的 JSBridge 中,主要是通過攔截 URL 請求來達到 native 端和 webview 端相互通信的效果的。

這里我們以比較火的 WebviewJavascriptBridge 為例,來解析一下它的實現(xiàn)方式。

源碼地址:https://github.com/marcuswestin/WebViewJavascriptBridge

2-1、在 native 端和 webview 端注冊 Bridge

注冊的時候,需要在 webview 側(cè)和 native 側(cè)分別注冊 bridge,其實就是用一個對象把所有函數(shù)儲存起來。

function registerHandler(handlerName, handler{
    messageHandlers[handlerName] = handler;
}
- (void)registerHandler:(NSString *)handlerName handler:(WVJBHandler)handler {
    _base.messageHandlers[handlerName] = [handler copy];
}

2-2、在 webview 里面注入初始化代碼

function setupWebViewJavascriptBridge(callback{
       if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
       if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
       window.WVJBCallbacks = [callback];
       var WVJBIframe = document.createElement('iframe');
       WVJBIframe.style.display = 'none';
       WVJBIframe.src = 'https://__bridge_loaded__';
       document.documentElement.appendChild(WVJBIframe);
       setTimeout(function(document.documentElement.removeChild(WVJBIframe) }, 0)
}

這段代碼主要做了以下幾件事:

(1)創(chuàng)建一個名為 WVJBCallbacks 的數(shù)組,將傳入的 callback 參數(shù)放到數(shù)組內(nèi)

(2)創(chuàng)建一個 iframe,設(shè)置不可見,設(shè)置 src 為https://__bridge_loaded__

(3)設(shè)置定時器移除這個 iframe

2-3、在 native 端監(jiān)聽 URL 請求

iOS 中有兩種 webview,一種是 UIWebview,另一種是 WKWebview,這里以 WKWebview 為例:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
    if (webView != _webView) { return; }

    __strong typeof(_webViewDelegate) strongDelegate = _webViewDelegate;
    if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationResponse:decisionHandler:)]) {
        [strongDelegate webView:webView decidePolicyForNavigationResponse:navigationResponse decisionHandler:decisionHandler];
    }
    else {
        decisionHandler(WKNavigationResponsePolicyAllow);
    }
}

這段代碼主要做了以下幾件事:

(1)攔截了所有的 URL 請求并拿到 url

(2)首先判斷isWebViewJavascriptBridgeURL,判斷這個 url 是不是 webview 的 iframe 觸發(fā)的,具體可以通過 host 去判斷。

(3)繼續(xù)判斷,如果是isBridgeLoadedURL,那么會執(zhí)行injectJavascriptFile方法,會向 webview 中再次注入一些邏輯,其中最重要的邏輯就是,在 window 對象上掛載一些全局變量和WebViewJavascriptBridge屬性,具體值如下:

window.WebViewJavascriptBridge = {
        registerHandler: registerHandler,
        callHandler: callHandler,
        disableJavscriptAlertBoxSafetyTimeout: disableJavscriptAlertBoxSafetyTimeout,
        _fetchQueue: _fetchQueue,
        _handleMessageFromObjC: _handleMessageFromObjC
};

var sendMessageQueue = [];
var messageHandlers = {};

var responseCallbacks = {};
var uniqueId = 1;

(4)繼續(xù)判斷,如果是 isQueueMessageURL,那么這就是個處理消息的回調(diào),需要執(zhí)行一些消息處理的方法(第四步會詳細講)

2-4、webview 調(diào)用 native 能力

當(dāng) native 和 webview 都注冊好了 Bridge 之后,雙方就可以互相調(diào)用了,這里先介紹 webview 調(diào)用 native 能力的過程。

2-4-1、webview 側(cè) callHandler

當(dāng) webview 調(diào)用 native 時,會調(diào)用 callHandler 方法,這個方法具體邏輯如下:

bridge.callHandler('ObjC Echo', {'key':'value'}, function responseCallback(responseData{
       console.log("JS received response:", responseData)
})

function callHandler(handlerName, data, responseCallback{
        if (arguments.length == 2 && typeof data == 'function') {
                responseCallback = data;
                data = null;
         }
        _doSend({ handlerName:handlerName, data:data }, responseCallback);
}

function _doSend(message, responseCallback{
        if (responseCallback) {
               var callbackId = 'cb_'+(uniqueId++)+'_'+new Date().getTime();
               responseCallbacks[callbackId] = responseCallback;
               message['callbackId'] = callbackId;
         }
         sendMessageQueue.push(message);
         messagingIframe.src = CUSTOM_PROTOCOL_SCHEME + '://' + QUEUE_HAS_MESSAGE;
}

實際上就是先生成一個 message,然后 push 到 sendMessageQueue 里,然后更改 iframe 的 src。

2-4-2、native 側(cè) flushMessageQueue

然后,當(dāng) native 端檢測到 iframe src 的變化時,會走到 isQueueMessageURL 的判斷邏輯,然后執(zhí)行 WKFlushMessageQueue 函數(shù),獲取到 JS 側(cè)的 sendMessageQueue 中的所有 message。

- (void)WKFlushMessageQueue {
    [_webView evaluateJavaScript:[_base webViewJavascriptFetchQueyCommand] completionHandler:^(NSString* result, NSError* error) {
        if (error != nil) {
            NSLog(@"WebViewJavascriptBridge: WARNING: Error when trying to fetch data from WKWebView: %@", error);
        }
        [_base flushMessageQueue:result];
    }];
}

- (void)flushMessageQueue:(NSString *)messageQueueString{
    if (messageQueueString == nil || messageQueueString.length == 0) {
        NSLog(@"WebViewJavascriptBridge: WARNING: ObjC got nil while fetching the message queue JSON from webview. This can happen if the WebViewJavascriptBridge JS is not currently present in the webview, e.g if the webview just loaded a new page.");
        return;
    }

    id messages = [self _deserializeMessageJSON:messageQueueString];
    for (WVJBMessage* message in messages) {
        if (![message isKindOfClass:[WVJBMessage class]]) {
            NSLog(@"WebViewJavascriptBridge: WARNING: Invalid %@ received: %@", [message class], message);
            continue;
        }
        [self _log:@"RCVD" json:message];

        NSString* responseId = message[@"responseId"];
        if (responseId) {
            WVJBResponseCallback responseCallback = _responseCallbacks[responseId];
            responseCallback(message[@"responseData"]);
            [self.responseCallbacks removeObjectForKey:responseId];
        } else {
            WVJBResponseCallback responseCallback = NULL;
            NSString* callbackId = message[@"callbackId"];
            if (callbackId) {
                responseCallback = ^(id responseData) {
                    if (responseData == nil) {
                        responseData = [NSNull null];
                    }

                    WVJBMessage* msg = @{ @"responseId":callbackId, @"responseData":responseData };
                    [self _queueMessage:msg];
                };
            } else {
                responseCallback = ^(id ignoreResponseData) {
                    // Do nothing
                };
            }

            WVJBHandler handler = self.messageHandlers[message[@"handlerName"]];

            if (!handler) {
                NSLog(@"WVJBNoHandlerException, No handler for message from JS: %@", message);
                continue;
            }

            handler(message[@"data"], responseCallback);
        }
    }
}

當(dāng)一個 message 結(jié)構(gòu)存在 responseId 的時候說明這個 message 是執(zhí)行 bridge 后傳回的。取不到 responseId 說明是第一次調(diào)用 bridge 傳過來的,這個時候會生成一個返回給調(diào)用方的 message,其 reponseId 是傳過來的 message 的 callbackId,當(dāng) native 執(zhí)行 responseCallback 時,會觸發(fā)_dispatchMessage 方法執(zhí)行 webview 環(huán)境的的 js 邏輯,將生成的包含 responseId 的 message 返回給 webview。

2-4-3、webview 側(cè) handleMessageFromObjC

function _handleMessageFromObjC(messageJSON{
    _dispatchMessageFromObjC(messageJSON);
}

function _dispatchMessageFromObjC(messageJSON{
       if (dispatchMessagesWithTimeoutSafety) {
             setTimeout(_doDispatchMessageFromObjC);
 } else {
             _doDispatchMessageFromObjC();
 }

 function _doDispatchMessageFromObjC({
        var message = JSON.parse(messageJSON);
        var messageHandler;
        var responseCallback;
        if (message.responseId) {
                responseCallback = responseCallbacks[message.responseId];
                if (!responseCallback) {
                          return;
                }
                responseCallback(message.responseData);
                delete responseCallbacks[message.responseId];
         } else {
               if (message.callbackId) {
                       var callbackResponseId = message.callbackId;
                       responseCallback = function(responseData{
                             _doSend({ handlerName:message.handlerName, responseId:callbackResponseId, responseData:responseData });
                        };
                }

                var handler = messageHandlers[message.handlerName];
                if (!handler) {
                        console.log("WebViewJavascriptBridge: WARNING: no handler for message from ObjC:", message);
                } else {
                        handler(message.data, responseCallback);
                }
          }
     }
}

如果從 native 獲取到的 message 中有 responseId,說明這個 message 是 JS 調(diào) Native 之后回調(diào)接收的 message,所以從一開始 sendData 中添加的 responseCallbacks 中根據(jù) responseId(一開始存的時候是用的 callbackId,兩個值是相同的)取出這個回調(diào)函數(shù)并執(zhí)行,這樣就完成了一次 JS 調(diào)用 Native 的流程。

2-4-4、過程總結(jié)

過程如下圖

1、native 端注冊 jsb

2、webview 側(cè)創(chuàng)建 iframe,設(shè)置 src 為__bridge_load__

3、native 端捕獲請求,注入 jsb 初始化代碼,在 window 上掛載相關(guān)對象和方法

4、webview 側(cè)調(diào)用callHandler方法,并在responseCallback上添加callbackId: responseCallback,并修改 iframe 的 src,觸發(fā)捕獲

5、native 收到 message,生成一個responseCallback,并執(zhí)行 native 側(cè)注冊好的方法

6、native 執(zhí)行完畢后,通過 webview 執(zhí)行_handleMessageFromObjC方法,取出 callback 函數(shù),并執(zhí)行

2-5、native 調(diào)用 webview 能力

native 調(diào)用 webview 注冊的 jsb 的邏輯是相似的,不過就不是通過觸發(fā) iframe 的 src 觸發(fā)執(zhí)行的了,因為 Native 可以自己主動調(diào)用 JS 側(cè)的方法。其具體過程如下圖:

1、native 側(cè)調(diào)用callHandler方法,并在responseCallback上添加callbackId: responseCallback

2、native 側(cè)主動調(diào)用_handleMessageFromObjC方法,在 webview 中執(zhí)行對應(yīng)的邏輯

3、webview 側(cè)執(zhí)行結(jié)束后,生成帶有responseId的 message,添加到sendMessageQueue中,并修改 iframe 的 src 為__wvjb_queue_message__

4、native 端攔截到 url 變化,調(diào)用 webview 的邏輯獲取到 message,拿到responseId,并執(zhí)行對應(yīng)的 callback 函數(shù)


以上便是本次分享的全部內(nèi)容,希望對你有所幫助^_^

喜歡的話別忘了 分享、點贊、收藏 三連哦~。

歡迎關(guān)注公眾號  前端Sharing




瀏覽 29
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 色999在线播放视频| 人人操美女| 51成人精品午夜福利| 俺来也俺去也www色| 欧美偷拍| 永久黄网站| 91人妻无码精品蜜桃| 亚洲精品成人无码AV在线| 九九亚洲精品| 色综合社区| 国产精品久久久91| 抽插视频欧美| 伊人在线视频| 狠狠操av| 伊人五月天激情| 99xxxxx| 日本中文视频| 日本A片免费| 天天操天天干天天| 国产草逼网站| 吴梦梦一区二区三区| 黄色内射在线播放| 成人精品在线| 91香蕉视频在线播放| 国产一区二区视频在线观看| 天天操天天撸| 黄色综合网| 蜜桃av秘无码一区三| 亚洲人成电影网| 国产成人h| 丰满大爆乳波霸奶| 国产人妖av| 日本一区二区网站| 久草蜜臀| 人人爱人人操| 波多野结衣无码高清| 深爱五月婷婷| 国产精品AV在线| 日本乱伦中文字幕| 无码不卡在线观看| 精品人妻午夜一区二区三区四区| 亚洲精品视频免费看| 欧美日韩在线看| 婷婷五月中文| 中文字幕巨肉乱码中文乱码| av网站免费在线观看| 中文字幕成| 神马午夜影院| 国产精品国产三级国产专区52| 欧美精品一区二区三区蜜臀 | 日本一区二区视频| 日韩有码电影| 中文电视剧字幕在线播放免费视频| 嫩BX区二区三区的区别| 黄色A片电影| 国产人妻精品一二三区| 中文字幕无码网站| 美女视频毛片| 天天舔天天干| 少妇av| 新中文字幕| 亚洲人人妻| 日韩AV电影网站| 另类天堂| 国产精品视频在线看| 国产精品一级片| 水蜜桃一曲二区| 99er视频| 影音先锋男人资源站| 成人日韩欧美| 国模精品无码一区二区免费蜜桃| 人妻无码一区二区三区摄像头| 成年人视频网| 天天干婷婷五月天| 中文字幕日韩乱伦| 日韩三级片网址| 91夜夜夜| 国产女18毛片多18精品| 国产精品久久久久久久久久久免费看| 日韩视频无码| 亚洲无码成人网站| 天天av天天av天天爽| 爱爱视频免费| 天天射日日干| 亚洲秘无码一区二区三区观看| 国产乱妇乱子伦视频免费观看| 操比视频| 久久久婷婷| 中文午夜福利| 一区二区三区操逼| 亚洲国产成人精品综合99| 人人爽亚洲AV人人爽AV人人片| 一本色道精品久久一区二区三区| A一级黄片| 在线免费观看国产视频| 色噜噜网站| 人妻熟女88AⅤ| 亚洲成人精品AV| 黄色国产网站| 欧美性猛交XXXX乱大交HD| 俺也去网站| 日本女人牲交视频| 亚洲秘无码一区二区三区蜜桃中文| 成人大香蕉网| 青青草原在线| 在线观看亚洲天堂| 国产十八岁在线观看免费| 国产高清在线视频| 91免费在线视频| 日本三级网址| 日韩91在线视频| 黄色视频免费在线看| 免费的a片| 色哟哟――国产精品| 91在线你懂的| 久操久| 河南熟妇搡BBBB搡BBBB| 国产精品揄拍500视频| 国产精品色视频| av天堂中文字幕| 免费看黃色AAAAAA片| 免费看欧美成人A片无码| 亚洲无码激情| 欧美大片视频| 国产在线久久久| 国产精品色呦呦| 99精品国产一区二区| 黄色AV免费观看| 成人做爰黄片视频免费| 蜜桃性爱视频| 大黄网站在线观看| 青娱乐无码| 欧美精品秘一区二区三区蜜臀| 免费观看无码| 91激情电影| 99热6| 免费的a片| 青春草在线播放| 天天日天天操天天摸天天干天日射天天插 | 婷婷激情丁香五月天| JIZZJIZZ国产精品喷水| 久9久9久9久9久9久9| 久久人妻精品| JULIA超乳JULIA无码| 日韩三级在线观看| 一级黄色电影网站| 苗条一区小视频| 日本肏逼视频| 亚洲无码高清免费| 日韩AV无码成人精品| 97亚洲精品| 欧美色图综合网| 国产传媒在线观看| 黄片网站在线观看| 久久成人在线视频| 粉嫩99精品99久久久久久特污| 亚洲超碰在线观看| 男人在线天堂| 婷婷99狠狠躁天天躁| 91成人在线观看学生和老师| 麻豆精品国产| 日韩无码2024| 久操久| 欧美日韩国产中文字幕| 麻豆人妻换人妻好紧| 亚洲福利电影| 亚洲国产精品成人网站| 北条麻妃九九九在线视频| 免费欧美黄色| 久久精品夜色噜噜亚洲A∨| 成人自拍视频在线观看| wwwA片| 麻豆精品国产| 亚洲色图15| 国产操逼小视频| 91精品婷婷国产综合久久| 日日摸日日| 青草中文娱乐网在线| 免费看V片| 骚逼久久| 久久国产激情| 日韩第一页| 九九草影院| 久热这里只有| 性爱视频小说| 91蝌蚪在线| 免费黄色| 精品国产精品国产精品国产网站| 中文字幕36页| 大香蕉中文网| 日韩AV电影在线观看| 香蕉漫画在线观看18| 黄色福利网| 99色在线视频| 亚洲五月丁香| 色玖玖| 麻豆性交| 一本色道久久| 欧美l∨视| 乱伦五月天| 777国产盗摄偷窥精品0000| 色婷婷国产精品视频| 久草精品视频| 亚洲无码在| 欧美色一级| 国产小视频在线免费观看| 操逼视频网址| 黄色毛片视频| 国产一区二区久久| 久久久久久久免费无码| 91人人看| 人人精品| 五月丁香无码| 国产手机精品视频| 三浦恵子一级婬片A片| 丁香五月天AV| 午夜成人福利电影| 国产AV无码一区| 麻豆视频一区二区三区| 久久亚洲婷婷| 91成人视频| 黄色不卡视频| 国产h在线| 亚洲无码高清视频在线观看| 东北成人毛片| 人人艹在线| 狼友视频在线免费观看| 一级片在线| 国产男女无套免费| 黄色高清无码视频| 成人免费看AA片| 黄网免费看| 一区二区三区久久久久| 人人综合| 撸一撸成人在线做爱视频。| 狠狠艹狠狠干| 久久精品www人人爽人人| 91豆花视频18| 亚洲黄色视频在线免费观看| 91无码人妻一区二区| 日韩色| 精国产品一区二区三区A片| 特一级黄色视频| 日韩高清无码电影| 91操美女视频| 乱伦内射视频| 老熟女-ThePorn| 黄色特级aaa片| 欧美日韩一区二区在线| 欧美成人激情视频| 欧美性爱精品一区| 一区二区三区四区| 天天日夜夜艹| 欧美色伊人| 日韩一区二区三区免费视频| 亚洲精品在线看| 日本高清色清di免费观看| 超碰免费人人| 天天干天天色天天日| 日韩一级| 免费在线观看A| 日韩精品一区在线观看| 欧美成人黄色小视频| 77777精品成人免费A片| 青娱乐无码| 五月天久久久久久| 久久久久久久久久久国产| 丰满的人妻一区二区三区果冻| TokyoKot大交乱无码| 大吊AV| 国产成人精品免费视频| 综合激情av| 国产一级片网站| 亚洲精品三级| 嫩BBB槡BBBB槡BBBB二一| 在线免费观看中文字幕| 成人网肏逼视频| 色视频免费观看| 国产成人在线免费视频| 免费观看黄色成人网站| 国产香蕉视频在线观看| 伊人网在线观看| 日本爱爱片| 免费v片在线观看| 先锋影音一区二区三区| 亚洲AV无码精品国产| 超碰麻豆| 手机看片1024你懂的| 青青草国产亚洲精品久久| 天天干天天撸影视| 国产伦精品一区二区三区视频女 | 苍井空在线播放| 在线18禁| www.黄色| 亚洲精品久久久久毛片A级绿茶| 亚洲成人在线网站| 超碰人人干人人操| 欧美一级黄| 午夜av免费在线| 免费看操逼逼| 久草福利在线| 亚洲国产成人久久| 91人妻人人澡人人爽人人| 亚洲一级婬片A片AAAA网址| 国产又爽又黄免费网站在线| 91一区二区| 久久精品免费电影| 中文字幕综合| 超碰97人妻| 亚洲黄色录像| 日韩激情视频在线观看| 成人激情在线视频| 久久婷婷久久| 日韩AV一二三| 人人操人人爱人人拍| 人人干国产| 一级无码毛片| 无码砖区| 欧美性爱综合网| 91人人妻人人爽| 懂色av,蜜臀AV粉嫩av| 日本少妇性爱视频| 欧美成人午夜视频| 日韩综合不卡| 无码秘人妻一区二区三-百度| 中文AV第一页| 久久国产精品一区二区三区| 悠悠AV导航| 中文字幕在线视频第一页| 五月久久| 亚洲有码中文字幕| 成人网在线视频| 黄色a一级| 无码aa| 午夜爱爱爱| 99久久精品国产一区色| 日韩人妻久久| 水果派av解说| 免费一区视频| 午夜视频福利| 国产精品国产三级国产AⅤ中文 | 亚洲一级免费视频| 蜜桃av秘无码一区二区三| 大香蕉啪啪视频| 日韩AV在线直播| 亚洲熟妇在线| 日本的黄色视频| 婷婷色在线观看| 日本A片一级| 骚熟妇| 久久6热| 大地影院资源官网| 精品乱子伦一区二区三区毛| 日本中文字幕在线播放| 天天综合网久久| 少妇黄色视频| 日韩免费性爱视频| 九九热热| 欧美成人A片AAA片在线播放| 精品国产99| 日本国产在线视频| 五月婷婷欧美| 国产足交视频| 黄色免费网站| 91精品成人| 色94色.欧美.setu| 亚洲精品中文字幕在线观看 | 大鸡巴视频在线观看| 青青久久91| 99久久婷婷国产综合精品电影| 婷婷亚洲国产| 夜夜操夜夜爽| 91亚洲免费视频| av大香蕉| 一本色综合亚洲精品| 日韩大码无码| 色综合久久天天综合网| 亚洲免费av在线| 西西特级无码444www| 久久一二三| 亚洲午夜剧场| 67194国产| 久久精品99视频| 五月中文字幕| 日本一区二区三区视频在线观看| 豆花AV| 亚洲中文字幕有码| 成人视频网站在线观看| 操逼逼综合网| 熟女一区二区三区| 国产91精品看黄网站在线观看| AV国产在线观看| 亚洲理论电影| 天堂婷婷| 精品一区二区三区蜜桃臀www| 日本一区免费| 日本一区二区视频在线观看| 久草免费在线视频| 久久人妻精品| 全部视频午夜寂寞| 蜜桃视频一区二区三区四区使用方法| 国产在线色视频| 中文字幕AV在线观看| 亚洲天堂婷婷| 日本操骚逼| jizzjizz欧美| 好屌肏| 亚洲精品欧美| 99福利| 吴梦梦一区二区三区| 色五月天婷婷| 蜜臀av网| 驲韩在线视频免费观看| 黄色综合网| 久久久久中文字幕| 嫩草视频| 大香蕉在线75| 啪啪A片| 精品无码秘人妻一区二区三区| 一区二区三区日本| 女人的天堂AAA| 亚洲AV成人无码精品直播在线| 欧美在线操| 婷婷久久综合久色| 日本久久精品18| 骚骚网站| 久久免费精品视频| 日韩特一级| 中文无码99| 亚洲高清在线观看视频| 69人妻人人澡人人爽久久| 蜜臀激情| 人人骚| 亚洲第一中文字幕| 男女网站在线观看| 久草福利在线视频| 日本三级片网址| 丁香五月天在线播放| 日韩成人在线免费观看| 日无码视频| 中文字字幕中文字幕乱码| 久久久久亚洲AV成人网人人软件 | 欧美一级特黄真人做受| 亚洲黄色电影在线观看| 亚洲人妻无码视频| 国产女人与禽zOz0性| 午夜亚洲| 国产色五月| 日韩群交视频| 男女操逼视频网站免费| 艹逼视频网站| 三级片亚洲无码| 思思热精品在线| 肏屄免费视频| www.插插| 97色色视频| 黄色视频网站在线观看| 一级一级一级做a免费一级做a| 波多野结衣在线无码视频| 91欧美| 国产欧美综合一区二区三区 | 99热这里有精品| 亚洲国产视频一区| 麻豆91网站| 91看片| 成人免费网站黄| 骚骚网站| 尤物视频在线播放| 草b视频| 97干网| 一级艹逼| 日韩欧美在线免费观看| 无码一级二级| 超碰av电影| 激情亚洲| 九九九成人网| 老太色HD色老太HD-百度| 日本一级片中文字幕| 国产精品A片| 你懂得在线观看| 亚洲AV图片| 亚洲乱码一区| 国产精品成人AV在线| 无码骚逼| 欧美三级网址| 成人手机看片| 亚洲精品99| 久久久久久久久久8888| 伊人久久无码| 综合激情五月婷婷| 日韩人妻一区二区| 777无码| 激情一级| 99色综合网| 无码不卡视频| 国产激情福利| 三级黄色视频在线观看| 骚BBBB槡BBB槡BBB| 国产一级美女操逼视频免费播放| 成人自拍视频在线观看| 午夜福利爱爱视频| 操b视频在线免费观看| 三级片日本在线| 天天日天天操天天干| 日本综合视频| 丁香六月婷婷综合缴| 小早川怜子精品一区二区| 97色色网| 午夜高清无码视频| 性爱一级| 日本久久成人| 婷婷视频网站| 国产精品久久久久久久久久乐趣播| 九九黄片| 黑人精品欧美一区二区蜜桃| 好好的日视频| 日韩一级片子| 3级毛片| 一区二区三区四区免费观看| 国产做爱视频| 男女黄色免费网站| 嫩BBB槡BBBB槡BBB小号| 一级黄色A片| 亚洲精品一区二区三区在线观看| 国产91精品久久久天天| 黑人一区二区三区四区| 国产成人小视频在线观看| 97精品人妻| 国产精品久久久久久久久久久免费看| 午夜无码高清| 青青操视频在线| 蜜桃无码一区| www伦理片-韩国三级三级三级a三级-成人AV | JiZZjiZZ亚洲成熟熟妇| 国产黄色视频在线看| 久久精品婷婷| 校园春色成人| 免费AV网站| 亚洲无码高清视频在线观看| 一级片在线视频| 91精品国产一区二区| 亚洲美女网站免费观看网址| 三级久久网| 婷婷色网| 欧美精品综合| 内射91| 欧美激情视频一区二区| 爱爱免费不卡视频| 久操B| 国产视频一区二区在线| 免费播放片色情A片| 成人区精品一区二区婷婷| 久操福利视频| 人人肏屄| 97久久综合| 国精产品九九国精产品| 欧美激情无码炮击| 无码人妻一区二区三区免费九色| 婷婷五月精品中文字幕| 91免费在线看| 四虎成人无码| 大香蕉75在线| 精品国产一| 国产一级A片免费看| 欧美成人片免费看| 97人人艹| 国产精品久久久久久久久久王安宇 | 91精品人妻一区二区三区四区| 国产高清在线免费观看AV片 | 中文字幕丰满的翔田千里| 亚洲精品一区二区三区四区高清| www一个人免费观看视频www| www.狠狠操| 久久99热这里只频精品6学生| 国内精品久久久久| 黑人巨粗进入疼哭A片| 三级无码在线观看| 国产综合久久久777777色胡同| 自拍偷拍1| 久在草| 操碧一区| 欧美日韩视频在线| 欧美性爱自拍| 97资源超碰| 一区二区三区黄色| 久草视频首页| 成年人在线播放| 国产日本在线观看| 在线观看AV网站| 午夜成人无码视频| 99久久人妻精品免费二区| 人妻无码一区二区三区免费| 久久嫩草在线影院| AV解说| 69成人网站| 欧美精品久久| 农村少妇久久久久久久| 无码人妻精品一区二区三区蜜臀百度 | 无码免费观看视频| av黄色在线观看| 色色毛片| 国产欧美成人| 福利色播| 亚洲日韩欧美在线观看| 丰满人妻一区二区三区视频54| 特级西西444www无码视频免费看| 少妇BBB| 操屄视频免费观看| 国产3p露脸普通话对白| 日本少妇激情视频| 无码人妻精品一区二区50| 四虎影院中文字幕| 中文字幕在线观看福利视频| 国产一级黄片| 色婷婷丁香五月| 国产激情在线视频| 国产福利av| 江苏妇搡BBBB搡BBBB| 无码视频一区| 男人天堂v| 91啪啪视频| 琪琪色视频| 日本十八禁网站| 日韩免费观看视频| 五月深爱| 成人做爰100片免费观看视频| 北条麻妃在线一区| 69xx视频| 国产精品久久久久久久久久久久久 | 蜜桃视频无码区在线观看| 精品啪啪| 五月婷婷综合激情| 中文字幕人妻丝袜二区电影| 亚洲一二三四区| 国产一级特黄大片| 亚洲免费观看在线观看| 久久A级片| 嘿咻嘿咻动态图| 永久免费叼嘿| 8x8拨牐拨牐拨牐永久免费| 91.射| 日本色中文字幕| 日韩久久久| 日韩资源站| 亚洲精品日韩综合观看成人91| 精品乱子伦一区二区在线播放| 炮友五月天| 九九热日本| 日本天堂网在线观看| 在线观看亚洲无码视频| 日韩AV网站在线观看| 日本特黄视频| 黄色视频在线观看| 国精自拍| 日韩无码AV中文字幕| 色欲av网站| 色777网站| 中文字幕在线一区二区a| www污| 上海熟妇搡BBBB搡BBBB| 婷婷丁香六月天| 亚洲成人影音| 色天使av| 国产成人a亚洲精品无码| 好色婷婷| 99色网站| 久热精品在线观看| 九哥操逼视频| 色综合色| 黄色日逼视频| 久久偷拍视频| 日韩ava| 五月天久久久久久| 大地资源第三页在线观看免费播放最新| 777国产盗摄偷窥精品0000| 黄色香蕉网站| 免费高清无码视频在线观看| 国产美女免费视频| 亚洲在线资源| 天堂a√在线8| 91福利视频在线观看| 中文电视剧字幕在线播放免费视频| 免费91视频| 天天干中文字幕| 成人自拍视频在线观看| 午夜激情视频在线观看| 搡BBBB搡BBB搡Bb| 成人毛片网站| 成人激情视频A极| 九九热无码| 日本精品在线观看视频| 亚洲一区视频在线| 国精产品一区一区三区有限公司杨| 日韩一级性爱视频| 国外成人性视频免费| 欧美a片在线观看| 婷婷五月影院| ThePorn人妻白浆| 最近中文字幕免费| 欧美日本国产| 中韩AV在线免费观看| 91探花精品偷拍在线播放| 成人做爰黄级A片免费看土方| 中文字幕成| аⅴ资源新版在线天堂| 麻豆成人精品国产免费| 精品免费在线观看| www.男人天堂| 中文字幕一区二区三区精华液| 天天日日天天| 无码中文字幕高清| 日韩精彩视频| 超碰av电影| 欧美成人电影在线观看| 国产在线观看91| 国产v视频| 西西444www无码精品| 激情五月天成人| 99re| 婷婷五月999| 91麻豆国产视频| 日韩精品一区二区亚洲AV观看| 色天堂在线观看视频| 中文有码在线观看| 亚洲精品第一页| 成人黄片免费看| 狠狠的操| 中文字幕自拍偷拍| 亚洲黑人av| 亚洲成人电影无码| 日韩欧美一级视频| 西西人体大胆ww4444多少集 | 99精品视频北条麻妃国产版| 色国产视频| 亚洲精品国产精品国自产| 亚洲综合精品| 在线午夜福利| 国产精品久久久久永久免费看| 亚洲中字幕新| 精品色片| 18禁网站免费观看| 国产高清无码在线观看视频| av岛国免费| 51妺嘿嘿午夜福利| 欧美成人午夜无码A片秀色直播| 夜夜狠狠躁日日| 91黄网站在线观看| 男人天堂视频网站| 亚洲成人娱乐网| 日逼大片| 夜夜骚精品人妻av一区| 黄色免费高清视频| 简单AV网| 亚洲精品ww| 97看片| 玉米地一级婬片A片| 日本老妇操屄视频| 一级a爱视频| 亚洲AV无码成人精品一区| 日本色视频| 国产丝袜视频| 国产麻豆剧传媒精品国产AV| 51成人免费| 人人射人人射| 人人妻人人玩人人澡人人爽| 91人妻论坛| 日韩av在线免费观看| 啪啪啪av| 亚洲丰满熟妇| 中文无码字幕在线| 亚洲综合免费观看高清完整版| 91视频亚洲| 人人操人人摸人人射| 五月婷婷导航| 俺也去五月婷婷| 人妻无码一区二区三区摄像头| 欧美无人区码suv| 波多野结衣被操| 中文四区| 欧美一区二区在线视频| 江苏妇搡BBBB搡BBBB| 女人自慰网站在线观看| 久草大香蕉在线| 99热国产在线观看| 91成人小电影| 五月天黄色电影| 2019中文字幕mv第三季歌词 | 最新免费一区二区三区| 人妻天天干| 人人妻人人澡人人爽人人| 天天干天天操综合| 啪啪免费| 91第一页| 重庆美女揉BBBB搡BBBB| 熊猫视频91| 超碰人人人人人人人人| 国产乱伦内射| 国产区av| 一级黄色蜜芽视频| 亚洲无吗视频| www.黄色电影| 国产欧美日韩在线观看| 一区二区操逼| 国产一区二区在线播放| 激情五月婷婷五月| 俺去也视频| 操干视频| 日韩高清无码观看| 亚洲va视频| 一级无码毛片| 久草三级片| 69成人天堂无码免费| 青娱乐网| 天天搞天天曰在线观看| 国产伦精品一区二区三区妓女下载| 日本欧美在线播放中文| 西西特级无码444www| 久久91人妻无码精品蜜桃HD| 婷婷深爱激情| 在线精品福利| 五月天婷婷影院| 91精品国产一区二区三区四区大 | 欧美人成人无码| 亚洲精品在线看| 欧美操屄视频| 亚洲少妇性爱视频| 韩国中文无码| 久久人妻中文字幕| 在线亚洲日韩| 天干天干天夜夜| 图片区小说区区亚洲五月| 青娱乐三级在线免| 韩国高清无码60.70.80| AAA一区二区三区| 欧美黄页| 成人视频免费网站| 日韩黄色免费视频| 大香蕉久久伊人| 在线免费看a片| 久久人人操| 噼里啪啦免费观看视频大全| 蜜桃av秘无码一区三| 边摸边做| 91人妻日韩人妻无码专区精品| 国产精品无码激情| 欧美l∨视| 国精产品一区一区三区四区| 国产a片免费观看| 怡红院综合网| 91视频观看| 成人性生交片无码免费看人| 狠狠躁日日躁夜夜躁A片小说免费| 国产免费成人视频| 日韩无码精品AV| 人妻熟女视频| 亚洲a电影| 亚洲人妻少妇| 日本一级理论片在线大全| www.97av| 中文在线字幕电视剧免费平台| 操逼无码精品| 国产高清中文字幕| 免费一级黄色视频| 中文字幕无码一区二区| 特级西西444WWW高清| yw视频在线观看| 狼友在线观看| 国产主播精品| 四川少妇搡bbw搡bbbb| 亚洲免费观看高清完整版在va线观| 成人a级网站| 天天操欧美| 亚洲在线资源| 蜜桃av在线播放| 欧美黄色网视频| 在线观看视频亚洲| 久久精品视频在线| 91AV久久| 成年女人免费视频| 这里只有精品视频| 在线观看操逼| 91豆花成人网站| 亚州一级成人片| 久久蜜桃视频| 免费在线观看A片| 蜜芽成人在线视频| 欧美性夜黄A片爽爽免费视频| 日欧美美女逼| 色猫咪av| 成人精品久久久| 中文字幕www一区| 亚洲成色A片77777在线小说| 日韩精品成人| 在线免费观看成人视频| 亚洲视频中文字幕| 亚洲综合免费| 日韩无码视频网站| 大香蕉国产精品| 影音先锋91久久网| 男人天堂无码|