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

微信小程序架構分析 (中)

開發 架構
本文探討一下小程序的 view 模塊和 service 模塊是如何構成的。

【引自第九程序的博客】本文探討一下小程序的 view 模塊和 service 模塊是如何構成的。

打開微信 web 開發者工具,然后輸入 openVendor() 便會打開 WeappVendor這個目錄,這里包含了 view 模塊和 service 模塊使用的幾個核心文件:

  • wcc 可執行程序,用于將 wxml 轉為 view 模塊使用的 js 代碼,使用方式為wcc xxx.wxml
  • wcsc 可執行程序,用于將 wxss 轉為 view 模塊使用的 css 代碼,使用方式為 wcsc xxx.wxss
  • WAService.js 提供 service 模塊大部分功能,下面會有詳細介紹
  • WAWebview.js 提供 view 模塊大部分功能,下面會有詳細介紹

view 頁面詳解

view 頁面的 template 如下:

  1. <!DOCTYPE html> 
  2. <html lang="zh-CN"
  3. <head> 
  4.   <link href="https://res.wx.qq.com/mpres/htmledition/images/favicon218877.ico" rel="Shortcut Icon"
  5.   <meta charset="UTF-8" /> 
  6.   <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" /> 
  7.  
  8.   <script> 
  9.     var __webviewId__; 
  10.   </script> 
  11.  
  12.   <!-- percodes --> 
  13.  
  14.   <!--{{WAWebview}}--> 
  15.  
  16.   <!--{{reportSDK}}--> 
  17.  
  18.   <!--{{webviewSDK}}--> 
  19.  
  20.   <!--{{exparser}}--> 
  21.  
  22.   <!--{{components_js}}--> 
  23.  
  24.   <!--{{virtual_dom}}--> 
  25.  
  26.   <!--{{components_css}}--> 
  27.  
  28.   <!--{{allWXML}}--> 
  29.  
  30.   <!--{{eruda}}--> 
  31.  
  32.   <!--{{style}}--> 
  33.  
  34.   <!--{{currentstyle}}--> 
  35.  
  36.   <!--{{generateFunc}}--> 
  37. </head> 
  38.  
  39. <body> 
  40.   <div></div> 
  41. </body> 
  42.  
  43. </html>  

其中 <!-- percodes --> 會在 dev 模式開啟后被替換為一個時間錨點,例如:

  1. <script>var pageFrameStartTime = new Date();</script> 

<!--{{WAWebview}}--> 會被 WAWebview.js 內代碼替換

<!--{{WAWebview}}--> 到 <!--{{generateFunc}}--> 之間暫時沒有被使用到

<!--{{generateFunc}}--> 會被 wcc 命令生成后的 js 代碼替換

除了上面這些,頁面上還會被插入頁面和應用的 style 標簽,如:

  1. <link rel="stylesheet" type="text/css" href="index.wxss"

這里的 wxss 文件包含的是原始 wxss 文件轉換后的 css

以及生成 DOM 的啟動腳本:

  1. <script> 
  2.   document.dispatchEvent(new CustomEvent("generateFuncReady", { 
  3.     detail: { 
  4.       generateFunc: $gwx('./page/index.wxml'
  5.     } 
  6.   })) 
  7. </script>  

WAWebview.js 文件中的各個模塊(行號為 jsbeautify 之后代碼行號,開發者工具版本:092300):

  • 1-77 行: WeixinJSBridge 對象兼容層,這個大概只會在調試時用到,因為開發時和運行時頁面都會被后臺以注入的方式添加 WeixinJSBridge 這個對象。我們可以通過這段代碼看到它暴露的方法: invoke invokeCallbackHandleron publish subscribe subscribe subscribeHandler。
  • 78-235 行:Reporter 對象,它的作用就是發送錯誤和性能統計數據給后臺
  • 236-596 行:wx 對象,頁面的核心之一,一方面封裝 WeixinJSBridge 的 invokeMethod 方位為易于調用的形式(例如 redirectTo, navigateTo等),另一方面封裝 WeixinJSBridge 回調方法,調用者可以使用wx.onAppDataChange(callback) 添加數據變更的回調函數,***提供wx.publishPageEvent 發送頁面事件到后臺
  • 607-1267 行:wxparser 對象,提供 dom 到 wx element 對象之間的映射操作,提供元素操作管理和事件管理功能
  • 1268-1285 行:轉發 window 上的 animation 和 transition 相關的動畫事件到 exparser
  • 1286-1313 行:訂閱并轉發 WeixinJSBridge 提供的全局事件到 exparser
  • 1324-1345 行:轉發 window 上的 error 以及各種表單事件到 exparser
  • 1347-3744 行:使用 exparser.registerBehavior 和exparser.registerElement 方法注冊各種以 wx- 做為標簽開頭的元素到 exparser
  • 3744-4498 行:virtual dom 渲染算法實現,提供 diff apply render 等方法,該模塊接口基本與 virtual-dom 一致,這里特別的地方在于它所 diff 和生成的并不是原生 DOM,而是各種模擬了 DOM 接口的 wx element 對象
  • 4599-4510 行:插入默認樣式到頁面

從頁面 data 到 dom 的主要流程如下:

  1. var vtree 
  2. var rootNode 
  3.  
  4. document.addEventListener("generateFuncReady"function(e) { 
  5.   var generateFunc = e.detail.generateFunc; 
  6.   wx.onAppDataChange(function(obj) { 
  7.     // 合并 data 到現有 data 
  8.     DataStore.setData(obj.data) 
  9.     // 生成 virtual dom 的 javascript plain object 
  10.     var props = generateFunc(DataStore.getData()) 
  11.  
  12.     // ***次渲染 
  13.     if (obj.options.firstRender) { 
  14.       vtree = createVirtualTree(props, true
  15.       rootNode = vtree.render() 
  16.       rootNode.replaceDocumentElement(document.body) 
  17.       wx.initReady() 
  18.     } else { 
  19.       var other_vtree = createVirtualTree(props, false
  20.       var patches = vtree.diff(other_vtree) 
  21.       patches.apply(rootNode) 
  22.       vtree = other_vtree 
  23.       document.dispatchEvent(new CustomEvent("pageReRender", {})); 
  24.     } 
  25.   }) 
  26. })  

上面的 DataStore 對象提供合并和獲取當前頁面 data 對象的功能,其實現如下:

  1. var DataStore = (function() { 
  2.   var data = {} 
  3.   return { 
  4.     getData: function() { 
  5.       return data 
  6.     }, 
  7.     setData: function(e) { 
  8.       for (var t in e) { 
  9.         for (var n = (0, parsePath)(t), o = data, a = void 0, s = void 0, c = 0; c < n.length; c++) Number(n[c]) === n[c] && Number(n[c]) % 1 === 0 ? Array.isArray(o) || (a[s] = [], o = a[s]) : "[object Object]" !== Object.prototype.toString.call(o) && (a[s] = {}, o = a[s]), s = n[c], a = o, o = o[n[c]]; 
  10.         a && (a[s] = e[t]) 
  11.       } 
  12.     } 
  13.   } 
  14. })() 
  15.  
  16. // 解析 key 為 data 內對象的路徑字符串 
  17. function parsePath(e) { 
  18.   for (var t = e.length, n = [], i = "", r = 0, o = !1, a = !1, s = 0; s < t; s++) { 
  19.     var c = e[s]; 
  20.     if ("\\" === c) s + 1 < t && ("." === e[s + 1] || "[" === e[s + 1] || "]" === e[s + 1]) ? (i += e[s + 1], s++) : i += "\\"; 
  21.     else if ("." === c) i && (n.push(i), i = ""); 
  22.     else if ("[" === c) { 
  23.       if (i && (n.push(i), i = ""), 0 === n.length) throw new Error("path can not start with []: " + e); 
  24.       a = !0, o = !1 
  25.     } else if ("]" === c) { 
  26.       if (!o) throw new Error("must have number in []: " + e); 
  27.       a = !1, n.push(r), r = 0 
  28.     } else if (a) { 
  29.       if (c < "0" || c > "9") throw new Error("only number 0-9 could inside []: " + e); 
  30.       o = !0, r = 10 * r + c.charCodeAt(0) - 48 
  31.     } else i += c 
  32.   } 
  33.   if (i && n.push(i), 0 === n.length) throw new Error("path can not be empty"); 
  34.   return n 

可以看到,每次 data 變化之后,小程序就會開始整個頁面的 diff patch 過程。

對于原生實現的組件, exparser 會在監視到數據變化后發送對應事件到 WeixinJSBridge。

service 頁面詳解

service 頁面會被被拼接為以下的樣子:

  1. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  5.   <link href="https://res.wx.qq.com/mpres/htmledition/images/favicon218877.ico" rel="Shortcut Icon"
  6.   <script> 
  7.   var __wxAppData = {} 
  8.   var __wxRoute 
  9.   var __wxRouteBegin 
  10.   </script> 
  11.   <script>var __wxConfig = {"pages":["page/index"], 
  12.   // app 相關各種配置 
  13.   }</script> 
  14.   <script src="http://70475629.appservice.open.weixin.qq.com/asdebug.js"></script> 
  15.   <script src="http://70475629.appservice.open.weixin.qq.com/WAService.js"></script> 
  16.   <script src="http://70475629.appservice.open.weixin.qq.com/app.js"></script> 
  17.   <script> 
  18.     __wxRoute = 'page/index'
  19.     __wxRouteBegin = true 
  20.   </script> 
  21.   <script src="http://70475629.appservice.open.weixin.qq.com/page/index.js"></script> 
  22. </head> 
  23.  
  24. <body> 
  25.   <script> 
  26.     window._____sendMsgToNW({ 
  27.       sdkName: 'APP_SERVICE_COMPLETE' 
  28.     }) 
  29.   </script> 
  30. </body> 
  31.  
  32. </html>  

除了配置和開發者編寫的頁面、app.js,頁面還在加載了 asdebug.js 和 WAService.js 兩個文件。

asdebug.js 文件位于 nwjs 項目目錄下,路徑為app/dist/weapp/appservice/asdebug.js。 它包含了兩個部分,一個是 WeixinJSBridge 針對 service 模塊的實現,另一塊是一些方便命令使用的接口, 例如:help() 會告訴你一些可用的函數:

 

該文件只會在開發者工具內被引入,如果小程序在微信內運行,應該會由微信底層提供 WeixinJSBridge。

WAService 負責 service 模塊的一些核心邏輯,它包含以下部分 (行號為 jsbeautify 之后代碼行號,開發者工具版本:092300):

  • 1-78 行: 跟 WAWebview.js 一樣的 WeixinJSBridge 兼容模塊
  • 79-245 行: 跟 WAWebview.js 一樣的 Reporter 模塊
  • 246-1664 行:比 WAWebview.js 中 wx 功能更為豐富 wx 接口模塊
  • 1665-2304 行:appServiceEngine 模塊,提供 Page,App,GetApp 接口
  • 2305-2360 行: 為 window 對象添加 AMD 接口 require define

現在的 WAService 還有有很多地方依賴 window 對象,所以很有可能它在微信中和開發者工具內一樣,依然運行于 webview 標簽之內。 

責任編輯:龐桂玉 來源: 第九程序的博客
相關推薦

2017-06-09 12:58:20

微信小程序架構分析

2017-06-09 10:06:54

微信小程序架構分析

2021-06-10 10:51:27

程序基礎架構

2016-11-04 10:30:17

微信小程序

2017-05-08 15:03:07

微信小程序開發實戰

2016-10-20 21:02:12

微信小程序javascript

2017-01-09 10:01:49

微信小程序

2016-09-28 18:10:59

微信程序MINA

2016-11-04 10:31:49

微信程序指南

2016-11-22 11:23:52

微信小程序騰訊微信

2016-09-27 15:40:58

微信程序前端

2016-11-04 10:49:48

微信小程序

2016-09-27 16:38:24

JavaScript微信Web

2016-11-19 18:06:44

微信小程序張小龍

2017-06-27 10:53:32

2016-09-27 20:36:23

微信HttpWeb

2018-07-26 15:16:50

小程序iPhone X甜酸

2017-02-06 13:32:12

微信小程序思想

2016-12-01 17:33:52

微信

2016-11-04 09:55:16

微信小程序
點贊
收藏

51CTO技術棧公眾號

国产精品xxxx喷水欧美| 欧美色图另类小说| 亚洲精品成人电影| 亚洲女同在线| 久久精品视频va| 成人午夜精品无码区| 综合在线影院| 一个色综合网站| 欧美一区二区三区精美影视| 国产精品一级视频| 在线一区视频| 久久亚洲电影天堂| 90岁老太婆乱淫| 视频二区欧美| 欧美特级限制片免费在线观看| 青青草原网站在线观看| 极品美乳网红视频免费在线观看| 国产自产视频一区二区三区| 午夜精品久久久久久久白皮肤| 激情五月深爱五月| 日韩精品亚洲aⅴ在线影院| 欧美精品电影在线播放| 国产第一页视频| 爱福利在线视频| 亚洲视频在线一区观看| 免费久久99精品国产自| 亚洲精品无码专区| 久久成人免费网| 日韩男女性生活视频| 国产精品99无码一区二区| 91精品福利| 中文字幕在线看视频国产欧美| 日本丰满少妇裸体自慰 | 综合久久久久综合| 欧美日韩亚洲免费| 欧美一级特黄aaaaaa| 精品中文字幕一区二区| 国产精品美女午夜av| 国产精品男女视频| 在线播放一区| 欧美第一淫aaasss性| 99成人在线观看| 日韩dvd碟片| 一区二区在线免费视频| 色无极影院亚洲| 亚洲区小说区图片区qvod| 精品国产乱码久久久久久牛牛| xxx中文字幕| 99蜜月精品久久91| 在线观看免费亚洲| 玩弄japan白嫩少妇hd| 人人草在线视频| 精品国产鲁一鲁一区二区张丽| h无码动漫在线观看| 婷婷色在线资源| 亚洲啪啪综合av一区二区三区| 亚洲欧美国产精品桃花| 午夜激情视频在线观看| 国产精品人妖ts系列视频| 亚洲va韩国va欧美va精四季| 成人网视频在线观看| 欧美激情自拍偷拍| 亚洲欧美日产图| 日本在线www| 亚洲男人的天堂网| 少妇一晚三次一区二区三区| 日韩激情美女| 五月婷婷综合在线| 妺妺窝人体色www在线小说| 欧美粗大gay| 欧美色成人综合| 在线视频日韩欧美| 国产精品tv| 亚洲精品之草原avav久久| 一区二区精品免费| 亚洲h色精品| 久久久久国产精品www| 在线观看免费国产视频| 爽好久久久欧美精品| 国产精品一区二区久久| 91精品中文字幕| 国产成人亚洲综合a∨婷婷| 国内精品二区| 成人免费在线观看| 亚洲精选一二三| 国产午夜福利100集发布| 又色又爽的视频| 精品国产综合久久| 欧美成在线观看| 成人免费看吃奶视频网站| 久久久久久久福利| 99热这里只有精品8| 国产精品福利久久久| 国产精品系列视频| 国产精品99| 亚洲天天做日日做天天谢日日欢| 8x8ⅹ国产精品一区二区二区| 乱子伦视频在线看| 日日骚av一区二区| 国产在线精品一区二区| 国产亚洲第一区| 9色在线观看| 亚洲国产一区二区三区| 亚洲综合在线网站| 911精品国产| 这里只有精品视频在线| 久久久久久久久艹| 开心九九激情九九欧美日韩精美视频电影 | 日本三级韩国三级欧美三级| 欧美性极品xxxx娇小| 色婷婷一区二区三区在线观看| 日韩精品亚洲aⅴ在线影院| 久久婷婷国产麻豆91天堂 | 欧美日韩视频第一区| 日韩女优在线视频| 国产电影一区二区在线观看| 2018日韩中文字幕| av一区二区三| 中文字幕一区二区三区在线观看| 欧美v在线观看| 久久综合给合| 久久久精品一区二区三区| 欧美特级一级片| 成人性生活免费看| 久草在线免费福利资源| 中文无码日韩欧| 国产精品小仙女| 91亚洲国产成人精品一区二三| 国产成人精品一区| www.日本在线观看| 国产精品国产三级国产aⅴ原创| 男人日女人逼逼| 亚洲国产一区二区三区网站| 精品国产欧美成人夜夜嗨| 久久黄色精品视频| 成人免费视频一区| 91麻豆天美传媒在线| 欧美日韩视频免费观看| 精品视频在线播放免| 免费视频网站www| 久久 天天综合| 亚洲国产一区二区精品视频 | 国产欧美精品一区二区色综合 | 综合日韩av| 亚洲国产欧美一区二区三区同亚洲 | 亚洲欧美在线另类| 伊人色在线观看| 成人在线免费小视频| 国产精品免费一区| yourporn在线观看中文站| 在线视频中文字幕一区二区| 久久国产精品影院| 日韩av在线播放中文字幕| 欧美另类网站| 88xx成人免费观看视频库| 国产亚洲人成网站在线观看| 中文字幕手机在线视频| 国产人久久人人人人爽| 亚洲欧洲日本精品| 91高清一区| 成人h视频在线观看| gogo高清在线播放免费| 亚洲第一免费网站| 青青国产在线观看| 国产色综合一区| 亚洲污视频在线观看| 久久亚洲成人| 亚洲一区二区三区毛片| 福利小视频在线| 亚洲精品国产精品乱码不99按摩 | 欧美在线一区二区三区四区| 欧美一级高潮片| 日日摸天天添天天添破| 在线成人www免费观看视频| 粉嫩av一区二区三区免费观看| 欧美xxxx免费虐| 国产自产高清不卡| 午夜精品久久久久久久99水蜜桃 | 欧美激情亚洲激情| 国产高清在线观看视频| 亚洲国产成人av好男人在线观看| 欧美精品欧美极品欧美激情| 久久午夜电影| 中文字幕人成一区| 波多野结衣在线一区二区| 欧美最猛性xxxxx免费| 天堂аⅴ在线地址8| 日韩精品一区二区三区在线播放 | 欧美日本一道本在线视频| 在线免费观看亚洲视频| 99久久精品一区二区| 成人在线免费播放视频| 婷婷精品进入| 国产一级特黄a大片99| 久久夜夜操妹子| 精品中文字幕乱| 免费在线看v| 日韩欧美一级片| 好吊色在线视频| 国产精品三级av| 国产熟女高潮一区二区三区| 狂野欧美性猛交xxxx巴西| 懂色av一区二区三区四区五区| 久久丝袜视频| 91人成网站www| 婷婷激情一区| 国内偷自视频区视频综合| 欧美一区三区三区高中清蜜桃| 日色在线视频| 日韩欧美国产精品| 欧美视频xxxx| 欧美日韩免费在线| 日本aⅴ在线观看| 欧美激情综合在线| 亚洲av片不卡无码久久| 国产精品一区2区| 艹b视频在线观看| 羞羞答答国产精品www一本| 黑人巨茎大战欧美白妇| 久久中文亚洲字幕| 欧美日韩综合久久| 色婷婷狠狠五月综合天色拍| 成人免费观看网站| 亚洲青青久久| 国产精品偷伦一区二区| 亚洲美女尤物影院| 国内偷自视频区视频综合 | 欧美激情在线看| 中文字幕1区2区| 国产一区二区三区在线看麻豆| 一区二区成人网| 日韩精品乱码免费| 1024精品视频| 国产精品嫩草99av在线| 欧美一级免费播放| 亚洲大胆视频| 欧美久久久久久久久久久久久 | 亚洲国产精品精华液ab| 99re久久精品国产| 99久久久国产精品| 最新在线黄色网址| 99精品久久久久久| 第四色在线视频| av中文字幕不卡| 人妻丰满熟妇aⅴ无码| 91在线免费播放| 黄色录像a级片| 成人av动漫在线| 完美搭档在线观看| 99久久99久久精品免费看蜜桃| 精品无码人妻少妇久久久久久| 国产成人av一区二区| 美女被爆操网站| 国产成人99久久亚洲综合精品| 中文字幕第六页| 懂色av中文一区二区三区 | 亚洲综合五月天婷婷丁香| 欧美亚洲日本国产| 中文字幕一区二区三区免费看 | 亚洲午夜私人影院| 国产一级做a爰片在线看免费| 亚洲午夜电影在线观看| 久久夜靖品2区| 色哟哟精品一区| 欧美在线视频精品| 欧美巨大另类极品videosbest | 国产高清精品久久久久| 少妇欧美激情一区二区三区| 高清shemale亚洲人妖| 99久久免费看精品国产一区| 久久久久久久久久久电影| 少妇精品无码一区二区免费视频| 国产精品日日摸夜夜摸av| 国产精品三区在线观看| 午夜久久久久久| 精产国品一区二区| 欧美美女网站色| 成人av手机在线| 精品国产免费一区二区三区香蕉| 国产又粗又长又大视频| 日韩欧美国产精品一区| 午夜福利理论片在线观看| 永久免费毛片在线播放不卡| 美女国产在线| 国内精品美女av在线播放| 自拍偷自拍亚洲精品被多人伦好爽 | 四虎国产精品永久在线国在线| 99热99热| 奇米狠狠一区二区三区| 国产一二三四五| 久久激情婷婷| 中文字幕 欧美 日韩| 久久综合一区二区| 久久福利免费视频| 天天综合天天综合色| 夜夜狠狠擅视频| 亚洲国产中文字幕久久网| 9色在线观看| 国内精品久久久久伊人av | 久久精品五月婷婷| 天天做天天爱天天爽综合网| 成人黄色av片| 国产在线视频一区二区| 日韩乱码人妻无码中文字幕久久| 一区二区三区在线播放| 无码人妻精品一区二区蜜桃色欲| 日韩欧美电影一二三| 久久经典视频| 韩日精品中文字幕| 日韩精品一区二区三区中文字幕| 欧美日韩亚洲一区二区三区在线观看 | 国产精品影视在线观看| 国产在线观看无码免费视频| 亚洲精品日日夜夜| 伊人久久久久久久久久久久| 精品久久久久av影院| 麻豆av在线导航| 亚洲精品网址在线观看| 久草资源站在线观看| 亚洲小说欧美另类社区| www.涩涩涩| 99在线精品视频| 精品99在线观看| 9191成人精品久久| 国产成人精品毛片| 91精品啪在线观看国产81旧版| 欧洲精品久久| 99热在线精品观看| 精品国产一二区| 亚洲欧美福利一区二区| 亚洲在线观看av| 一区二区亚洲欧洲国产日韩| 日韩影片中文字幕| 久久精品欧美| 国产亚洲网站| 国产精品无码一区二区三| 午夜精品久久久久久久| 欧洲av在线播放| 欧美风情在线观看| 亚洲国产中文在线二区三区免| 裸体裸乳免费看| 极品少妇一区二区| 色欲一区二区三区精品a片| 91麻豆精品国产91久久久更新时间| 欧美被日视频| 成人性生交大片免费看视频直播| 婷婷综合在线| 国产欧美激情视频| 亚洲三级免费电影| 国产三级漂亮女教师| 欧美不卡视频一区发布| 日韩区欧美区| 国产va亚洲va在线va| 成人av网址在线| 日韩美女黄色片| 亚洲精品视频在线观看视频| 欧美一级大黄| 亚洲成人精品电影在线观看| 蜜桃视频一区二区| 黄色a级片在线观看| 日韩欧美成人激情| 91破解版在线观看| 欧美人与物videos另类| 日本欧美加勒比视频| 自拍偷拍第9页| 日韩欧美aaaaaa| 性xxxxfreexxxxx欧美丶| 欧洲久久久久久| 九色|91porny| 久久久久亚洲AV成人| 亚洲国产日韩欧美在线99| 裤袜国产欧美精品一区| 亚洲一区三区| 成人高清视频在线观看| 色屁屁影院www国产高清麻豆| 国产一区二区三区在线观看视频 | 女人裸体性做爰全过| 在线电影院国产精品| 波多野结衣在线播放| 日韩影片在线播放| 韩国欧美国产一区| 久久精品视频国产| 一区二区三区视频观看| 欧美黄色一级| 那种视频在线观看| 久久夜色精品| 久久久久久免费精品| 午夜精品福利在线视频| 欧美一区二区三区久久精品茉莉花| 在线观看欧美www| 登山的目的在线| 销魂美女一区二区三区视频在线| 欧美一级视频在线| 亚洲伊人色欲综合网| 黄色在线小视频| 亚洲自拍偷拍色片视频| 久久福利毛片| 九九热精品免费视频| 亚洲天堂男人的天堂| 视频一区日韩精品|