精品欧美一区二区三区在线观看 _久久久久国色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在线| 日本黄色网址大全| 日本资源在线| 成人免费毛片高清视频| 亚洲午夜av久久乱码| 女人另类性混交zo| 91这里只有精品| 国产剧情一区二区三区| 欧美富婆性猛交| 亚州av综合色区无码一区| 天堂中文在线播放| 中文字幕成人av| 亚洲一区中文字幕| 亚洲欧美在线视频免费| re久久精品视频| 欧美在线视频你懂得| 免费观看中文字幕| 色视频在线观看免费| 麻豆91精品| 操人视频在线观看欧美| 日韩精品人妻中文字幕有码 | 欧美激情第6页| 国产伦精品一区二区三区精品 | 亚洲免费视频一区二区| 国产精品久久久毛片| 色a资源在线| 久久这里只有精品6| 国产精品爽爽爽爽爽爽在线观看| 女同性恋一区二区三区| 成人影院网站| 亚洲欧美日韩电影| 女女同性女同一区二区三区91| 久久午夜鲁丝片午夜精品| 亚洲影院天堂中文av色| 欧美一区二区在线观看| 国产第一页视频| 牛牛精品视频在线| 中文欧美字幕免费| aa成人免费视频| www.久久网| 亚洲免费黄色| 欧美美最猛性xxxxxx| 亚洲最大成人网站| 视频在线观看免费影院欧美meiju| 亚洲女人****多毛耸耸8| 狠狠色伊人亚洲综合网站色| 国产精品视频在线观看免费| 国产精品一二| 久久久久久久亚洲精品| 亚洲综合第一区| 丝袜连裤袜欧美激情日韩| 欧美一区二区免费视频| 日日干夜夜操s8| 97精品国产99久久久久久免费| 久久精品综合网| 精品在线观看一区二区| 在线免费观看日韩视频| 亚洲深夜激情| 亚洲3p在线观看| 免费在线视频观看| 中文字幕av亚洲精品一部二部| 欧美年轻男男videosbes| 欧美日韩国产精品激情在线播放| 欧美色18zzzzxxxxx| 成a人片国产精品| 91在线短视频| 国产chinasex对白videos麻豆| 亚洲午夜精品一区 二区 三区| 日韩欧美一区二区久久婷婷| 一区二区三区四区毛片| 神马久久资源| 在线欧美日韩精品| 亚洲熟妇av一区二区三区| 色呦呦久久久| 中文一区二区完整视频在线观看| 3d蒂法精品啪啪一区二区免费| 国产在线一区视频| 激情综合亚洲| 97av在线播放| 国产中文字幕视频| 老鸭窝91久久精品色噜噜导演| 伊人成人开心激情综合网| 特级西西www444人体聚色| 蜜桃一区二区三区| 国产一区二区三区在线看 | 最新日韩免费视频| 国产精品免费不| 亚洲天堂2020| 国产在线综合视频| 久久亚洲精品中文字幕蜜潮电影| 精品福利一区二区三区免费视频| 男人天堂新网址| 秋霞在线午夜| 黄色成人在线播放| 国产男女无遮挡| 成人在线视频免费| 欧美美女网站色| 俄罗斯女人裸体性做爰| 波多野结衣在线一区二区| 亚洲国产精品人久久电影| 日韩av一二区| 日韩精品第一区| 久久夜色精品亚洲噜噜国产mv| 成人网站免费观看| 色爱av综合网| 俺也去精品视频在线观看| 午夜69成人做爰视频| 国产精品分类| 国产精品黄视频| 99久久精品国产一区二区成人| 日韩电影一区二区三区| 国产精品自拍视频| 黄色片一区二区| 国产亚洲婷婷免费| 日本xxxxx18| 自拍在线观看| 91精品国产欧美一区二区18 | 国产精品久久久久久久久久久久午夜片 | 日韩av不卡在线| 一区二区www| 成人午夜激情在线| 神马欧美一区二区| 激情网站在线| 欧美日韩免费一区二区三区| 日本一卡二卡在线| 91久久夜色精品国产按摩| 68精品久久久久久欧美| 亚洲影院一区二区三区| 国内精品久久久久影院色| 久久国产一区| 国产成人l区| 色老头久久综合| 无码人妻精品一区二区三区温州 | 一本一道久久a久久综合精品| 成人在线免费电影| 激情成人在线视频| 欧美激情一区二区三区p站| 91精品国产自产在线观看永久∴| 久久99久久久久久久噜噜| 中文字幕av资源| 国产亚洲一区字幕| 成人免费毛片播放| 国产影视一区| 国模私拍一区二区三区| 丰满人妻一区二区| 一区二区免费视频| 性高潮免费视频| 亚洲视频综合| 国产在线精品一区二区中文| av中文在线资源| 亚洲第一视频网站| 青青操免费在线视频| 97aⅴ精品视频一二三区| 欧美久久久久久久久久久久久| 78精品国产综合久久香蕉| 亚洲性xxxx| 成年人晚上看的视频| 久久久不卡影院| 91色国产在线| 日韩亚洲一区在线| 91免费看片网站| 在线黄色网页| 亚洲福利影片在线| 青青国产在线观看| 国产欧美一区二区在线观看| 免费看污污网站| 亚洲精品2区| 激情小说网站亚洲综合网| 亚洲插插视频| 国产一区二区三区久久精品 | 欧洲一区在线电影| 麻豆视频免费在线播放| 国产一区二区三区免费播放| 日本老太婆做爰视频| 国产精品任我爽爆在线播放| 欧美诱惑福利视频| 婷婷在线视频观看| 欧美v国产在线一区二区三区| 99re6热在线精品视频| 国产揄拍国内精品对白| 日本人体一区二区| 国产99精品一区| 成人欧美在线观看| 美洲精品一卡2卡三卡4卡四卡| 在线免费不卡视频| 蜜臀视频在线观看| 久久久久久婷| 亚洲小说欧美另类激情| 国产精品视频3p| 国产精品嫩草影院一区二区| 性欧美ⅴideo另类hd| 日韩精品www| 91国在线视频| 精品久久久久久国产91| 国产精品1区2区3区4区| 东方欧美亚洲色图在线| 91看片就是不一样| 欧美日韩免费观看一区=区三区| 91最新在线免费观看| 理论片午夜视频在线观看| www.久久色.com| 无套内谢的新婚少妇国语播放| 一二三四社区欧美黄| 国产成人精品无码免费看夜聊软件| 亚洲福利精品| 亚洲一一在线| 要久久爱电视剧全集完整观看| 91精品国产沙发| 国产网友自拍视频导航网站在线观看| 欧美日韩免费观看一区二区三区 | 国产精品网址在线| 麻豆影视国产在线观看| 精品亚洲国产视频| 亚洲av无码一区二区乱子伦| 91黄色激情网站| 中文字幕亚洲精品一区| 一区二区在线免费观看| www..com.cn蕾丝视频在线观看免费版| 老司机久久99久久精品播放免费| 欧美视频小说| 精品视频高潮| 粉嫩精品一区二区三区在线观看 | 欧美做受高潮中文字幕| 久久精品国产精品亚洲精品 | 波多野结衣a v在线| 韩国欧美国产一区| www.久久91| 日韩一区精品字幕| 精品www久久久久奶水| 99精品视频免费| 国产精品www在线观看| 亚洲国产老妈| www亚洲国产| 国产精品99久久| 一区二区三区我不卡| 精品国产一区二区三区噜噜噜 | 欧美怡春院一区二区三区| 97caopor国产在线视频| 久久精品国产亚洲一区二区| 天堂资源在线中文| 尤物yw午夜国产精品视频明星| 性色av蜜臀av| 91精品国产福利| 国产按摩一区二区三区| 91精品国产综合久久久久久久| 久久精品人妻一区二区三区| 亚洲免费av高清| 午夜三级在线观看| 国产精品国产自产拍高清av| 久久精品色妇熟妇丰满人妻| 国产日产亚洲精品系列| 欧美激情视频二区| 国产精品久久久久婷婷| 国产又粗又猛又爽又黄的视频四季| 粉嫩绯色av一区二区在线观看| 激情网站五月天| 日韩国产欧美三级| 在线黄色免费观看| 黑人巨大精品欧美一区| 91丨porny丨九色| 成人福利视频在线| 噜噜噜在线视频| 国产午夜亚洲精品理论片色戒 | 中文字幕不卡在线观看| 老司机精品免费视频| ㊣最新国产の精品bt伙计久久| 国产精品无码专区| 久久久久久久国产精品影院| 国产又粗又猛又爽又黄的视频四季 | 色综合久久综合网欧美综合网| 亚洲波多野结衣| 一区二区国产盗摄色噜噜| 久久精品这里有| 色综合久久88色综合天天免费| 欧美久久久久久久久久久久| 亚洲一级二级在线| 五月天激情国产综合婷婷婷| 欧美三级视频在线播放| aa视频在线免费观看| 亚洲国模精品一区| 99视频在线观看地址| 欧美成在线视频| 澳门成人av网| 成人免费视频网| 日韩中文av| 亚洲高潮无码久久| 久久久久久久波多野高潮日日| 国产资源在线视频| 蜜桃av一区二区三区| 亚洲成人激情小说| 久久精品日韩一区二区三区| 国产又粗又硬视频| 亚洲国产视频一区二区| 亚洲国产精品无码久久久| 91精品国产综合久久精品麻豆| 97超碰资源站| 欧美精品一区男女天堂| 第一页在线观看| 久久久在线视频| 国产精品久久久久久久久免费高清| 国产精品99一区| 91在线一区| 一区二区高清视频| 亚洲国产导航| 中文字幕精品一区二区三区在线| 精品一区二区三区在线播放| 亚洲男人在线天堂| 亚洲精品视频在线观看免费| 精品国产乱子伦| 精品国产免费一区二区三区香蕉| 亚洲精品国产片| 中文字幕精品在线| 日韩欧美精品一区二区三区| 亚洲tv在线观看| 成人羞羞视频播放网站| 99视频在线免费播放| 国产成人综合精品三级| 国产又黄又粗又猛又爽的| 午夜激情一区二区| av免费观看在线| 日韩中文在线观看| 日本少妇一区| 欧美精品久久久| 亚洲精品色图| 18禁一区二区三区| 亚洲视频每日更新| 亚洲天天综合网| 一区二区国产精品视频| 日本在线高清| 免费国产一区二区| 一区二区三区四区五区在线 | 本网站久久精品| 日本高清久久一区二区三区| 国产日本精品| 成人h动漫精品一区| 亚洲电影在线免费观看| 亚洲精品无码专区| 欧美黑人xxxⅹ高潮交| 久久久久久亚洲精品美女| 亚洲一区二区三区乱码| 日本欧洲一区二区| 国产又黄又粗视频| 欧美三级中文字| 麻豆视频网站在线观看| 成人看片人aa| 自产国语精品视频| 爱情岛论坛亚洲自拍| 亚洲精品免费在线观看| 国产www免费观看| 久久久亚洲国产| 国产精品网址| 欧美网站免费观看| 久久嫩草精品久久久久| 99精品在线播放| 亚洲天堂免费在线| 国产极品嫩模在线观看91精品| 国产一区二区精品在线| 一区二区高清| 中文字幕国产综合| 欧美在线播放高清精品| 巨大荫蒂视频欧美另类大| 91久久精品国产91性色| 欧美日韩国产成人精品| 黄色免费看视频| 欧美性色19p| 在线毛片网站| 99re视频在线播放| 亚洲欧洲另类| av黄色在线免费观看| 欧美日韩成人一区| aa在线视频| 久久综合九九| 免费成人av在线| 久久久久久久久久综合| 亚洲男人的天堂在线| 欧美在线一级| av女优在线播放| 亚洲国产高清不卡| 成人黄色免费视频| 欧美主播福利视频| 国产精品久久久久久久| 精品国产一区在线| 欧美日韩在线免费视频| 丰满大乳少妇在线观看网站| 日本不卡一区二区三区在线观看 | 国产综合久久久| 欧美日韩性生活片| 日本一区二区综合亚洲| 99精品人妻无码专区在线视频区| 色视频www在线播放国产成人| 欧美电影免费看| 特级黄色录像片| 91免费版在线| 国产手机精品视频| 日韩av三级在线观看| 1024精品久久久久久久久| 亚洲精品乱码久久久久久蜜桃图片| 亚洲一二三区不卡| 波多野结衣在线影院| 51国偷自产一区二区三区的来源 |