精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

攜程Web組件在跨端場景的實踐

開發 新聞
為了優化此流程,我們引入了一種全新的方案——跨端共享 Web 組件。

作者簡介

Iris,攜程前端開發經理,專注于前端組件庫和工程化領域。

Abert,攜程高級研發經理,關注跨端解決方案。

一、背景

我們在開發 H5 營銷活動后,通常會將營銷活動的入口投放到多端,包括 App、小程序。常見的投放形式有:Native 原生頁面、React Native 頁面和小程序頁面的內嵌彈窗。那么此時,就需要 Native、RN、小程序端的人力投入。由此,整個流程從僅需 H5 開發演變成需要多端開發、溝通,從 H5 營銷活動靈活上線演變成受制于 App 和小程序的版本發布。

為了優化此流程,我們引入了一種全新的方案——跨端共享 Web 組件。這一方案秉承“一套 Web 代碼,多端共享”的理念,旨在縮短上線周期、降低人力成本、并快速響應迭代。采用跨端共享 Web 組件,我們能夠高效地實現多端共享,同時也能夠更加豐富地展示 Web 組件,從而為我們的業務帶來更多的價值。

二、方案介紹

那么如何做到“一套 Web 代碼,多端共享”——

我們的小程序使用 Taro 框架和 React 框架進行開發,Taro 支持渲染 HTML 標簽,鑒于此,我們選擇了 React 作為 Web 組件的開發技術棧,這樣,一方面,我們能直接運行在小程序端,另一方面可以用 React 的強大功能來創建可復用的自定義 HTML 元素。

在小程序端,Web 組件以 NPM 包的形式存在。在 Native 和 RN 端,使用 WebView,加載一個包含 Web Components 的 H5 鏈接。不管是 NPM 包的形式,還是 Web Components 的形式,都是同一套 Web 代碼的產物。

在介紹實踐過程之前,先簡單介紹一下 Web Components。Web Components 是 Web 標準的一部分,是 W3C 提出的一套組件模型。由三個主要技術組成:

a. Custom Elements:允許開發者創建自定義 HTML 元素,這些元素可以擁有自己的屬性和方法。

b. Shadow DOM:允許開發者創建封裝的 DOM 樹,將其附加到自定義元素上,從而實現樣式和行為的隔離。

c.  HTML Templates:允許開發者定義可重用的 HTML 模板,這些模板可以在不同的 Web 應用程序中使用。

瀏覽器基于此標準實現了一套 API,Web Components 作者可以用這些 API 去封裝組件功能,然后把它應用到任何地方,不必擔心有任何沖突。

React 或 Vue 都提供了相應 API,讓開發者能以 React 組件或 Vue 組件的形式書寫 Web Components。而這里,我們正是用的 React 組件的形式書寫 Web 組件,然后將其打包為 Web Components。

假設彈窗組件名為 zt-dialog,我們提供給 Native 和 RN 端的 H5 鏈接內容形似:

<html>

  <head>

    <script src="https://static.tripcdn.com/zt-dialog.umd.js"></script>

  </head>

  <body>

    <zt-dialog></zt-dialog>

  </body>

</html>

這段代碼表明,zt-dialog 組件的自定義 HTML 元素是 `zt-dialog` ,其功能邏輯被打包到一個 UMD 格式的 JavaScript 文件中。這意味著,Web 組件可以被應用到任何其他 H5 中。

我們給小程序端提供的內容則是一個 NPM 包 @ctrip/zt-dialog,主要內容則是:

import Dialog from '@ctrip/zt-dialog'

import '@ctrip/zt-dialog/dist/styles/mini.css'

三、Web組件與宿主環境

我們的 Web 組件相較于普通的 React 組件,需要考慮哪些問題呢?可以從 Web 組件寄宿于不同環境這個角度進行思考,在這個場景下,Native 端、RN 端、小程序端都是宿主環境。

因此我們要思考三個核心問題是:如何識別不同宿主環境,如何使用宿主環境的能力以及如何與宿主環境通信。

3.1 識別宿主環境

其實方法有很多種,比如各端可以傳一個特殊參數,或者利用 WebView 區別于小程序的全局變量等等,來做宿主環境的識別判斷。但最終我們選擇了一種更優解,利用環境變量,在構建時僅打包所需代碼。

環境變量是在應用程序運行時根據不同環境提供不同值的一種機制。我們的 Web 組件使用 Vite 進行構建,它支持在項目中使用環境變量。在應用程序中,通過 `import.meta.env` 對象來訪問這些環境變量,根據值不同,來執行不同的邏輯。在構建時,這些環境變量會被靜態替換。

比如下面這段源代碼,根據`VITE_COMP_TYPE` 變量的值來處理不同的宿主環境下的 onClose 事件和 onJump 事件:

const onClose = () => {

  if (import.meta.env.VITE_COMP_TYPE === 'mini') {

    console.log("mini")

  } else {

    console.log("webview")

  }

});


const onJump = () => {

  if (import.meta.env.VITE_COMP_TYPE === 'mini') {

    console.log("mini jump")

  } else {

    console.log("webview jump")

  }

}

通過這段構建命令:

cross-env VITE_COMP_TYPE=mini vite build

最終小程序端使用的 NPM 包結果輸出如下圖:

const u = () => {

      console.log("mini")

    },

    p = () => {

      console.log("mini jump")

    };

可以看出我們這里只會有`mini` 的代碼。從另一個角度講,小程序端引入 Web 組件,其 Size 是很敏感的,所以我們用這種方式也可以盡可能打包更小 Size 的代碼。

3.2 使用宿主環境的能力

Web 組件需要使用的能力一般來說,有發送請求、導航、分享、埋點。在 Native 和RN 端,我們使用 WebView 加載 Web 組件,那么發送請求,可以利用瀏覽器發送請求的能力;至于埋點,我們也可以使用瀏覽器加載埋點腳本,從而自行處理埋點邏輯;而導航和分享則使用橋方法即可。在小程序端,我們考慮得則要多一些,下面展開講講。

一般來說原生小程序都會對請求進行封裝,帶一些特定的請求參數,并且對請求返回值做預先的處理,因此發送請求只能由小程序端以組件參數的形式傳給 Web 組件。導航、埋點同理。

分享則有一些特殊,微信小程序規定,喚起分享有兩個條件:

條件一:通過給 button 組件設置屬性`open-type=share`;

條件二:在用戶點擊按鈕后觸發`Page.onShareAppMessage`事件獲取到分享相關信息。

條件一經測試,Web 組件用這樣的寫法即可滿足:

<button openType="share">

    <p>分享</p>

</button>

條件二則不行,如果你是小程序開發人員,那么你一定知道`Page.onShareAppMessage`是一個頁面處理函數,它是用于監聽用戶點擊頁面分享按鈕的事件,并不能被主動調用。解決這個問題的思路如下

a. Web 組件從小程序端提供的注冊中心拿到一個唯一分享源 ID

b. Web 組件將分享源 ID 給到 button 標簽

c. Web 組件向分享源信息中心注冊這個 ID 對應的分享信息

最終,用戶在點擊分享的時候,小程序端可從分享源信息中心拿到當前分享源 ID 對應的分享信息。圖示:

圖片

3.3 與宿主環境通信

思考一個問題,Web 組件是否需要與宿主環境通信?如果是,那通信場景有哪些?在實踐過程中,我們發現有這兩種場景:用戶點擊關閉組件、在合適的時機顯示組件。

通信方式如圖:

圖片

就實際場景來看下對應代碼,以“用戶點擊關閉按鈕”場景為例:

const closePopUp = () => {

    if (import.meta.env.VITE_COMP_TYPE === 'mini') {

        props.close(); // 小程序端傳遞的關閉事件參數

    } else if (isRNWebView() {

        window.postMessage(JSON.stringify({

            closeModal: true  // RN端使用postMessage發送closeModal事件

        }));

    } else if (isNativeWebView()) {

        window.Bridge.insideClose(() => {}); // APP端使用橋方法關閉當前WebView

    }

};

由此,不管什么場景下,我們都可以用類似的方式實現與宿主環境的通信。

再看下“在合適的時機顯示組件”這種場景,首先我們理解下什么是“合適的時機”,也許你會想,在符合特定業務邏輯的前提下,讓 Web 組件正常顯示不就是“合適的時機”嗎?實際實踐后,我們發現,在小程序端,我們采用了 NPM 包形式嵌入、打包分離、公共樣式抽離、webp 等方式盡可能優化其性能,Web 組件確實能正常顯示,準確說做到了讓用戶對組件加載無感知。

但是在 Native 和 RN 端,我們使用了 WebView 加載 H5 鏈接的方式,一旦使用了大圖+顯示動畫,那么 Web 組件的呈現方式就有一些不盡如人意,主要體現在用戶能明顯感知到大圖的加載過程、大圖未顯示完成動畫就已經開始。因此,需要把這種場景處理得更細致些。

處理思路如下:

a. Native 加載一個 WebView 容器,此時 WebView 不顯示

b. WebView 加載完成后,加載一個 H5,這個 H5 會加載耗時較多的資源

c. 待資源加載完成后,H5 通知到 Native 顯示 WebView

d. H5 顯示 Web 組件,此時開始 Web 組件的動畫

圖示:

圖片

等資源加載完成后,“通知Native顯示WebView”這個過程則使用橋方法通信機制。

由此,在 Native 和 RN 端,能夠更加細致化地控制 Web 組件的顯示,從而更加優雅地顯示 Web 組件。

至此,Web 組件和宿主環境之間的核心問題就解決了。在這時,我們還在小程序端遇到一個樣式的小問題。Taro 在進行 px 尺寸單位的換算時,默認以 750px 作為換算標準,而我們編寫 Web 組件時,通常以 375px 為標準。這導致在小程序端顯示時,整體樣式會比小程序的樣式小一倍,最后的解決方案是編譯小程序樣式時利用插件對尺寸*2。

另外為了優化圖片加載性能,Web 組件的圖片會使用 webp 格式。在小程序端,支持 webp,因此可以直接使用,而 Native 和 RN 端則需要根據瀏覽器支持情況做一下判斷。

四、對Web組件的支持

在了解了“一套 Web 代碼,多端共享”的正確打開方式之后,再來看下各端對 Web 組件需要做怎樣的支持。畢竟在換位思考之后,我們才能從“旁觀者清”的角度去完善 Web 組件。

首先,Native 端為 Web 組件開啟了一個透明的 WebView。這個 WebView 要區分于非透明的 WebView。因此約定 H5 鏈接里添加特定 query 參數。如果 Web 組件想要指定 WebView 的寬高,也是同樣地添加特定 query 參數。

假設約定的 query 參數是 `insidepop=1`,zt-dialog 組件的 H5 鏈接形式如下:

https://m.ctrip.com/demo/zt-dialog.html?insidepop=1

以 Android 為例,在 Native 端被使用:

Intent intent = new Intent(); // 初始化一個通用Intent

Activity activity = new Activity();

intent.setClass(activity, H5Container.class)

intent.putExtra(H5Container.URL_LOAD, 'https://m.ctrip.com/demo/zt-dialog.html?insidepop=1'); // 加載包含Web組件的H5鏈接

AppUtil.startActivity(activity, intent);

再者,在 RN 端,我們使用 WebView 控件開啟一個透明的 WebView。由于需要處理關閉彈窗、導航、分享等功能,RN 端基于 WebView 控件再次做了封裝。

同樣是 zt-dialog 組件的 H5 鏈接形式,在 RN 端被使用:

import React from 'react';

import { ViewPort, Text, TouchableHighlight } from 'react-native';

import { WebViewModal } from 'react-native-webview';


export default class Demo {

  render() {

    return (

      <ViewPort>

        <TouchableHighlight onPress={() => {this.webviewRef.showModal()}}>

          <Text>show modal</Text>

        </TouchableHighlight>          

        <WebViewModal

          position='bottom'

          webViewUrl={'https://m.ctrip.com/demo/zt-dialog.html'}

        />      

      </ViewPort>

    )

  }

}

最后,小程序端使用的是 NPM 包的形式,基于上述的一些思考,在小程序端,其很多能力都依賴于參數傳遞的方式,因此小程序端封裝了一個 React Hoc 組件,將我們約定好的請求、導航、分享等等能力都封裝到這個 Hoc 組件中。這個 Hoc 組件類似:

import React from "react"

import Taro from "@tarojs/taro"


const webBridgeHoc = (WebComp)=>{

  return (props)=>{

    return <WebComp

      _ubtTrace={_ubtTrace} // 埋點

      _request={requestFunc} // 小程序原生request

      _navigateTo={Taro.navigateTo} // 跳轉

      _redirectTo={Taro.redirectTo} // 重定向跳轉

      _reLaunch={Taro.reLaunch} // 關閉所有頁面,打開到應用內的某個頁面

      _switchTab={Taro.switchTab} // 切換tab頁

      ...

    />

  }

}

export default webBridgeHoc

zt-dialog 組件在小程序端被使用時:

import Dialog from '@ctrip/zt-dialog'

import '@ctrip/zt-dialog/dist/styles/mini.css'

import webBridgeHoc from '@/components/webBridgeHoc'

  
export default webBridgeHoc(Dialog)

總的來說,各端對 Web 組件的支持是相對簡單的。在做了一定的封裝之后,實際應用過程中,我們還在 Native 端的首頁彈窗進一步做了服務端收口下發 Web 組件的 H5 鏈接。因此 Native 端的首頁彈窗甚至無需再有 Native 端的人力介入,也可以完成一個完整閉環的需求交付周期。而這樣的過程是可以完全復制到小程序端和 RN 端的。至此,完全釋放 Native、RN、小程序的人力。

五、總結與展望

其實,從各端對 Web 組件的支持就可以看出,跨端共享 Web 組件一方面是整合了各端現有的能力,另一方面是發揮自己的優勢如豐富的動畫吸引用戶。換句話說,在實踐前期,投入的成本并不大,但初期的效益卻是直觀的——釋放了多端人力,而是否能夠最大化地發揮優勢產生收益則是我們  Web 組件開發需要繼續關注的課題。

后續我們將持續關注,豐富的 Web 組件表現形式是否有效提高了用戶的點擊率以及 Web 組件在各端的性能表現。

最后,讓我們看下 Web 組件的效果:

Native 端:

圖片

小程序端:

圖片

責任編輯:張燕妮 來源: 攜程技術
相關推薦

2022-08-06 08:23:47

云計算公有云廠商成本

2023-07-07 12:26:39

攜程開發

2025-06-24 09:44:41

2014-05-26 16:52:29

移動前端web組件

2022-05-20 11:09:15

Flybirds多端測試UI 自動化測試

2022-11-29 20:32:07

2022-07-15 12:58:02

鴻蒙攜程華為

2022-05-13 09:27:55

Widget機票業務App

2022-08-03 09:58:03

跨端框架實踐

2022-03-30 18:39:51

TiDBHTAPCDP

2022-08-12 08:38:08

攜程小程序Taro跨端解決方案

2023-01-04 12:17:07

開源攜程

2022-08-20 07:46:03

Dynamo攜程數據庫

2022-08-12 08:34:32

攜程數據庫上云

2023-02-08 16:34:05

數據庫工具

2022-07-15 09:20:17

性能優化方案

2022-07-08 09:38:27

攜程酒店Flutter技術跨平臺整合

2022-06-17 09:42:20

開源MMKV攜程機票

2024-04-26 09:38:36

2022-06-17 10:44:49

實體鏈接系統旅游AI知識圖譜攜程
點贊
收藏

51CTO技術棧公眾號

亚洲欧洲av在线| 天堂成人国产精品一区| 精品国产伦一区二区三区观看方式| 97碰在线视频| 黄色片免费在线| 精品一区二区三区免费视频| 隔壁老王国产在线精品| 久久精品国产亚洲av久| 国产免费av国片精品草莓男男| 亚洲观看高清完整版在线观看| 欧美成人免费在线| a级片免费视频| 男女精品网站| 欧美激情a在线| 免费看黄色三级| 91精品尤物| 欧美日本在线播放| 国产又黄又大又粗视频| 日本色护士高潮视频在线观看| 久久精品视频在线免费观看| aa成人免费视频| 在线视频你懂得| 亚洲欧美日韩国产综合精品二区| 欧美成aaa人片免费看| 亚洲av无码一区二区三区人| 国内自拍欧美| 欧美大片一区二区| 日本肉体xxxx裸体xxx免费| 国产伦久视频在线观看| 亚洲精选视频在线| 亚洲欧美日韩不卡一区二区三区| 手机亚洲第一页| 麻豆精品视频在线| 国产成人精品综合| 亚洲欧美日韩精品久久亚洲区 | 少妇黄色一级片| 丰满诱人av在线播放| 亚洲另类春色国产| 在线播放 亚洲| av女优在线| 国产蜜臀97一区二区三区| 欧美日韩精品综合| 欧美新色视频| 97se狠狠狠综合亚洲狠狠| www日韩av| 99re只有精品| 国产在线视频不卡二| 国产精品久久久久久超碰| 波多野结衣视频观看| 亚洲影音一区| 2019中文字幕在线观看| 日本一区二区不卡在线| 黄色成人av网站| 久久久久国产一区二区三区| 久久午夜无码鲁丝片| 午夜精彩国产免费不卡不顿大片| 欧美精品在线观看91| 99精品久久久久| 亚洲网址在线| 欧美一区二区.| 无码人妻精品一区二区三区9厂 | 欧美男男同志| 久久久久久97三级| 亚洲欧洲精品一区| 一色桃子av在线| 亚洲一区二区三区免费视频| 青青草视频在线免费播放| 免费电影日韩网站| 欧美三日本三级三级在线播放| 看欧美ab黄色大片视频免费 | 欧美日韩在线播| 爱豆国产剧免费观看大全剧苏畅| 年轻的保姆91精品| 欧美精品一区男女天堂| b站大片免费直播| 日韩欧美一区二区三区在线视频| 久久亚洲春色中文字幕| 免看一级a毛片一片成人不卡| 好吊视频一区二区三区四区| 57pao成人永久免费视频| 欧美激情一区二区三区免费观看| 国内精品免费**视频| 国产69精品久久久久9999apgf| 深夜福利免费在线观看| 国产精品久久久久久久久快鸭 | 欧美xxxxhdvideosex| 午夜成人免费电影| 日韩一区二区三区不卡视频| 日韩在线观看一区二区三区| 精品呦交小u女在线| 天天做夜夜爱爱爱| 亚洲少妇在线| 91理论片午午论夜理片久久| 天天干天天爱天天操| 国产精品久久久久三级| 精品无码一区二区三区爱欲| 日本欧美不卡| 亚洲黄色av女优在线观看| 少妇一级黄色片| 亚洲三级视频| 国产日韩av在线| 色哟哟在线观看| 一区二区三区在线高清| 熟妇人妻无乱码中文字幕真矢织江| 精品国产不卡一区二区| 国产一区二区三区久久精品| 精品一区二区三区四| 麻豆国产欧美日韩综合精品二区| 国产视频精品网| 无遮挡的视频在线观看| 色综合久久久久| 催眠调教后宫乱淫校园| 天天做天天爱天天综合网| 欧美一区二区三区精品电影| 亚洲高清视频网站| 国产精品久久久久久久久晋中 | 国产性生活视频| 成人国产精品免费观看动漫| 国产成人免费高清视频| 成人免费黄色| 亚洲一区二区久久久| 日韩高清免费av| 国产 欧美在线| 中文字幕一区二区三区精彩视频 | 91黄视频在线观看| 在线视频 日韩| 欧美色一级片| 亚洲精品日韩av| 日本免费在线视频| 欧美视频在线不卡| 亚洲无人区码一码二码三码的含义| 国产亚洲一区在线| 国产九区一区在线| 最爽无遮挡行房视频在线| 欧美三电影在线| 国产又粗又猛又爽视频| 欧美在线综合| 麻豆av一区二区三区| 热三久草你在线| 日韩精品视频免费专区在线播放 | 欧美一级搡bbbb搡bbbb| 欧美日韩午夜视频| 韩国v欧美v亚洲v日本v| 一区二区三区偷拍| 国产一区一区| 欧美大尺度激情区在线播放| av加勒比在线| 一区二区成人在线观看| 18禁一区二区三区| 国内在线观看一区二区三区| 国产一区免费| 亚洲涩涩在线| 国产亚洲精品一区二555| 波多野结衣视频在线看| 国产欧美视频一区二区三区| 久久久久国产一区| 亚洲经典一区| 国产高清不卡av| 亚洲欧美小说色综合小说一区| 日韩高清中文字幕| 国产九色91回来了| 成人免费小视频| 国产xxx在线观看| 99综合精品| 日本在线观看一区| 精品久久99| 久久伊人精品一区二区三区| 黄频网站在线观看| 色噜噜狠狠一区二区三区果冻| 欧美熟妇激情一区二区三区| 韩国av一区二区三区在线观看| 亚洲一区999| 国产精品啪啪啪视频| 成人全视频免费观看在线看| 久久深夜福利免费观看| 亚洲精品国产精品国| 欧美日韩免费在线观看| 欧美人与禽zoz0善交| 国产激情视频一区二区在线观看| 青青草成人免费在线视频| jlzzjlzz亚洲女人| 91在线高清免费观看| 爱啪视频在线观看视频免费| 尤物yw午夜国产精品视频明星 | 亚洲加勒比久久88色综合| 日韩精品成人免费观看视频| 综合久久久久综合| 国产麻豆xxxvideo实拍| 欧美bbbbb| 久久男人资源站| 欧美一级本道电影免费专区| 成人看片在线| 欧美性理论片在线观看片免费| 欧美精品在线看| 国产最新视频在线| 精品国产一二三区| 亚洲字幕av一区二区三区四区| 亚洲一级片在线观看| 极品人妻videosss人妻| 成年人午夜久久久| 国产欧美精品一二三| 久久久噜噜噜| 日韩伦理在线免费观看| 99久久99久久精品国产片桃花 | 国产精品久久久久久影视 | 国产精品igao视频| 2020日本在线视频中文字幕| 三级精品视频久久久久| 日韩欧美电影在线观看| 欧美成人福利视频| 91精品国自产| 在线观看日韩电影| 中文字幕亚洲高清| 亚洲一区二区三区影院| 永久免费看mv网站入口| 国产欧美一区二区精品忘忧草| 亚洲观看黄色网| 国产91色综合久久免费分享| 看看黄色一级片| 青青草国产精品97视觉盛宴| 日本三级免费网站| 一本色道久久综合| 青草视频在线观看视频| 欧美激情1区| 欧美少妇一级片| 91欧美大片| 亚洲一二区在线| 欧美日韩老妇| 日韩wuma| 狠狠色丁香婷婷综合影院| 久久草.com| 小说区图片区色综合区| 国产精品一区视频网站| aiai久久| 国产亚洲第一区| 成人看片爽爽爽| 国产一区免费观看| 欧美亚洲大陆| 久久国产精品精品国产色婷婷| 九九热播视频在线精品6| 国产精品美女黄网| 国产伦精品一区二区三区在线播放| 不卡一卡2卡3卡4卡精品在| 秋霞午夜一区二区三区视频| 91免费看蜜桃| 国产66精品| 蜜桃传媒视频第一区入口在线看| 婷婷亚洲精品| 日韩欧美视频第二区| 欧美午夜精品一区二区三区电影| 亚洲精品日韩精品| 久久要要av| 51xx午夜影福利| 国内成人在线| 国产精品50p| 日韩av在线免费观看不卡| 国产喷水theporn| 久久99久国产精品黄毛片色诱| 一级黄色免费毛片| 国产91精品久久久久久久网曝门 | 欧美精品第一页在线播放| 98色花堂精品视频在线观看| 91大神在线播放精品| 亚洲天堂一区二区| 成人xxxx视频| 一区二区三区欧洲区| 精品无码久久久久国产| 国产精品密蕾丝视频下载| 亚洲一区bb| 国产精品分类| 91视频免费版污| 国产成人综合精品三级| 久久精品综合视频| 综合欧美亚洲日本| 欧美三级韩国三级日本三斤在线观看 | 福利一区二区| av激情久久| 欧美日韩有码| 潘金莲一级淫片aaaaa免费看| 1000部精品久久久久久久久| 三级4级全黄60分钟| 国产一区二区成人久久免费影院| 亚洲激情 欧美| 国产精品麻豆视频| 国产亚洲精品久久久久久无几年桃| 一本一道波多野结衣一区二区| 国产精品伦理一区| 国产午夜精品久久久| 国产盗摄在线观看| 日本午夜人人精品| 视频精品二区| 午夜一区二区三视频在线观看| 欧美午夜在线视频| 婷婷六月天在线| av在线综合网| 日本一级片免费| 91久久精品一区二区三| 精品国产乱码久久久久久蜜臀网站| 亚洲欧美日本另类| 男插女视频久久久| 国产一区视频在线| 亚洲国产最新| www.欧美黄色| 久久精品999| 天堂久久精品忘忧草| 亚洲一区二区黄色| 99久久久久成人国产免费 | 在线观看wwwxxxx| 国产精品白丝jk喷水视频一区| 伊人www22综合色| 亚洲制服欧美久久| 天堂成人免费av电影一区| av2014天堂网| 玉足女爽爽91| 国产精品久久久国产盗摄| 国产一区二区三区视频免费| av免费不卡国产观看| 91黄在线观看| 91成人精品视频| 一区二区xxx| 国产网站一区二区三区| 国产www在线| 亚洲福利视频二区| 肉肉视频在线观看| 亚洲www视频| 欧美伊人影院| 一级黄色片在线免费观看| 国产精品私房写真福利视频| 中文字幕一二区| 在线播放日韩av| 高清av一区二区三区| 久久久综合亚洲91久久98| 99精品久久| 毛茸茸多毛bbb毛多视频| 五月天激情小说综合| 涩涩视频免费看| 69视频在线播放| 天堂俺去俺来也www久久婷婷| 欧美激情 国产精品| 成人动漫在线一区| 日本视频免费在线| 精品粉嫩aⅴ一区二区三区四区| 免费污视频在线观看| 国产欧美综合精品一区二区| 91久久视频| 精品无码在线视频| 日韩欧美精品在线观看| 玖玖综合伊人| 国产精品女人网站| 水蜜桃久久夜色精品一区| 一级做a免费视频| 亚洲精品久久久蜜桃| 国产综合视频在线| 91av视频在线免费观看| 欧美禁忌电影网| 欧美美女性视频| 亚洲综合免费观看高清在线观看| 蜜臀av午夜精品| 欧美中文字幕第一页| 成人看的视频| 午夜福利123| 午夜精品一区二区三区电影天堂 | 91香蕉视频污版| 18欧美亚洲精品| 高h放荡受浪受bl| 奇米影视亚洲狠狠色| 999国产精品永久免费视频app| 特种兵之深入敌后| 欧美日韩激情网| 天堂地址在线www| 成人一区二区在线| 久久国产主播| 免费国产羞羞网站美图| 亚洲国产99精品国自产| 精品3atv在线视频| 成人性做爰片免费视频| aaa国产一区| 伊人网av在线| 欧美激情综合色综合啪啪五月| 国产一卡不卡| 中文字幕在线观看视频www| 精品日韩中文字幕| 日本视频在线| 久久久久免费网| 激情欧美一区二区| 国产区在线观看视频| 久久伊人色综合| 最新亚洲精品| 黄色三级视频在线播放| 色一情一乱一乱一91av| 中文字幕中文字幕在线中高清免费版 | 欧美一级视频在线观看| 亚洲激情中文| 午夜在线观看一区| 精品国产伦理网| 亚洲色图综合| 久久精品一区二| 亚洲二区在线观看| 男人资源在线播放| 欧美极品视频一区二区三区|