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

一篇文章教你如何捕獲前端錯誤

新聞 前端
隨著前端頁面承載功能越來越多,用戶本地瀏覽器環境也錯綜復雜,因此即使有完善的測試,我們也無法保證上線的代碼不會出錯。

隨著前端頁面承載功能越來越多,用戶本地瀏覽器環境也錯綜復雜,因此即使有完善的測試,我們也無法保證上線的代碼不會出錯。在這種場景下,前端頁面的監控就成了各個web項目必備的工具。

 

一般對頁面的監控包含頁面性能、頁面錯誤以及用戶行為路徑獲取上報等。

 

而本文將重點關注其中的錯誤部分,主要介紹一下常見的錯誤類型以及如何對它們進行捕獲并上報。

常見錯誤的分類

對于用戶在訪問頁面時發生的錯誤,主要包括以下幾個類型:

1、js運行時錯誤

JavaScript代碼在用戶瀏覽器中執行時,由于一些邊界情況、本地環境的不可控等因素,可能會存在js運行時錯誤。

而依賴客戶端的某些方法,由于兼容性或者網絡等問題,也有概率會出現運行時錯誤。

e.g: 下圖是當使用了未定義的變量"foo",導致產生js運行時錯誤時的上報數據:

 

2、資源加載錯誤

這里的靜態資源包括js、css以及image等。現在的web項目,往往依賴了大量的靜態資源,而且一般也會有cdn存在。

如果某個節點出現問題導致某個靜態資源無法訪問,就需要能夠捕獲這種異常并進行上報,方便***時間解決問題。

e.g: 下圖是圖片資源不存在時的上報數據:

3、未處理的promise錯誤

未使用catch捕獲的promise錯誤,往往都會存在比較大的風險。而編碼時有可能覆蓋的不夠全面,因此有必要監控未處理的promise錯誤并進行上報。

e.g: 下圖是promise請求接口發生錯誤后,未進行catch時的上報數據:

4、異步請求錯誤(fetch與xhr)

異步錯誤的捕獲分為兩個部分:一個是傳統的XMLHttpRequest,另一個是使用fetch api。

像axios和jQuery等庫就是在xhr上的封裝,而有些情況也可能會使用原生的fetch,因此對這兩種情況都要進行捕獲。

e.g: 下圖是xhr請求接口返回400時捕獲后的上報數據:

 

各個類型錯誤的捕獲方式

1、window.onerror與window.addEventListener('error')捕獲js運行時錯誤

使用window.onerror和window.addEventListener('error')都能捕獲,但是window.onerror含有詳細的error堆棧信息,存在error.stack中,所以我們選擇使用onerror的方式對js運行時錯誤進行捕獲。

  1. window.onerror = function (msg, url, lineNo, columnNo, error) { 
  2.     // 處理錯誤信息 
  3. // demo 
  4. msg: Uncaught TypeError: Uncaught ReferenceError: a is not defined 
  5. error.statck: TypeError: ReferenceError: a is not defined at http://xxxx.js:1:13 
  6. window.addEventListener('error', event => (){  
  7.   // 處理錯誤信息 
  8. }, false); 
  9. // true代表在捕獲階段調用,false代表在冒泡階段捕獲。使用true或false都可以,默認為false 

2、資源加載錯誤使用addEventListener去監聽error事件捕獲

實現原理:當一項資源(如<img>或<script>)加載失敗,加載資源的元素會觸發一個Event接口的error事件,并執行該元素上的onerror()處理函數。

這些error事件不會向上冒泡到window,不過能被window.addEventListener在捕獲階段捕獲。

但這里需要注意,由于上面提到了addEventListener也能夠捕獲js錯誤,因此需要過濾避免重復上報,判斷為資源錯誤的時候才進行上報。

  1. window.addEventListener('error', event => (){  
  2.   // 過濾js error 
  3.   let target = event.target || event.srcElement; 
  4.   let isElementTarget = target instanceof HTMLScriptElement || target instanceof HTMLLinkElement || target instanceof HTMLImageElement; 
  5.   if (!isElementTarget) return false
  6.   // 上報資源地址 
  7.   let url = target.src || target.href; 
  8.   console.log(url); 
  9. }, true); 

3、未處理的promise錯誤處理方式

實現原理:當promise被reject并且錯誤信息沒有被處理的時候,會拋出一個unhandledrejection。

這個錯誤不會被window.onerror以及window.addEventListener('error')捕獲,但是有專門的window.addEventListener('unhandledrejection')方法進行捕獲處理。

  1. window.addEventListener('rejectionhandled', event => { 
  2.   // 錯誤的詳細信息在reason字段 
  3.   // demo:settimeout error 
  4.   console.log(event.reason); 
  5. }); 

4、fetch與xhr錯誤的捕獲

對于fetch和xhr,我們需要通過改寫它們的原生方法,在觸發錯誤時進行自動化的捕獲和上報。

改寫fetch方法:

  1. // fetch的處理 
  2. function _errorFetchInit () { 
  3.     if(!window.fetch) return
  4.     let _oldFetch = window.fetch; 
  5.     window.fetch = function () { 
  6.         return _oldFetch.apply(this, arguments) 
  7.         .then(res => { 
  8.             if (!res.ok) { // 當status不為2XX的時候,上報錯誤 
  9.             } 
  10.             return res; 
  11.         }) 
  12.         // 當fetch方法錯誤時上報 
  13.         .catch(error => { 
  14.             // error.message, 
  15.             // error.stack 
  16.             // 拋出錯誤并且上報 
  17.             throw error;  
  18.         }) 
  19.     } 

對于XMLHttpRequest的重寫:

xhr改寫

  1. // xhr的處理 
  2. function _errorAjaxInit () { 
  3.     let protocol = window.location.protocol; 
  4.     if (protocol === 'file:'return
  5.     // 處理XMLHttpRequest 
  6.     if (!window.XMLHttpRequest) { 
  7.         return;   
  8.     } 
  9.     let xmlhttp = window.XMLHttpRequest;     
  10.     // 保存原生send方法 
  11.     let _oldSend = xmlhttp.prototype.send; 
  12.     let _handleEvent = function (event) { 
  13.         try { 
  14.             if (event && event.currentTarget && event.currentTarget.status !== 200) { 
  15.                     // event.currentTarget 即為構建的xhr實例 
  16.                     // event.currentTarget.response 
  17.                     // event.currentTarget.responseURL || event.currentTarget.ajaxUrl 
  18.                     // event.currentTarget.status 
  19.                     // event.currentTarget.statusText 
  20.                 }); 
  21.             } 
  22.         } catch (e) {va 
  23.             console.log('Tool\'s error: ' + e); 
  24.         } 
  25.     } 
  26.     xmlhttp.prototype.send = function () { 
  27.         this.addEventListener('error', _handleEvent); // 失敗 
  28.         this.addEventListener('load', _handleEvent);  // 完成 
  29.         this.addEventListener('abort', _handleEvent); // 取消 
  30.         return _oldSend.apply(this, arguments); 
  31.     } 

關于responseURL 的說明

需要特別注意的是,當請求完全無法執行的時候,XMLHttpRequest會收到status=0 和 statusText=null的返回,此時responseURL也為空string。

另外在安卓4.4及以下版本的webview中,xhr對象也不存在responseURL屬性。

因此我們需要額外的改寫xhr的open方法,將傳入的url記錄下來,方便上報時帶上。

  1. var _oldOpen = xmlhttp.prototype.open; 
  2. // 重寫open方法,記錄請求的url 
  3. xmlhttp.prototype.open = function (method, url) { 
  4.     _oldOpen.apply(this, arguments); 
  5.     this.ajaxUrl = url; 
  6. }; 

其他問題

1、其他框架,例如vue項目的錯誤捕獲

vue內部發生的錯誤會被Vue攔截,因此vue提供方法給我們處理vue組件內部發生的錯誤。

  1. Vue.config.errorHandler = function (err, vm, info) {  // handle error  // `info` 是 Vue 特定的錯誤信息,比如錯誤所在的生命周期鉤子  // 只在 2.2.0+ 可用} 

2、script error的解決方式

"script error.”有時也被稱為跨域錯誤。當網站請求并執行一個托管在第三方域名下的腳本時,就可能遇到該錯誤。最常見的情形是使用 CDN 托管 JS 資源。

其實這并不是一個 JavaScript Bug。出于安全考慮,瀏覽器會刻意隱藏其他域的 JS 文件拋出的具體錯誤信息,這樣做可以有效避免敏感信息無意中被不受控制的第三方腳本捕獲。

因此,瀏覽器只允許同域下的腳本捕獲具體錯誤信息,而其他腳本只知道發生了一個錯誤,但無法獲知錯誤的具體內容。

解決方案1:(推薦)

添加 crossorigin="anonymous" 屬性。

  1. <script src="http://another-domain.com/app.js" crossorigin="anonymous"></script> 

此步驟的作用是告知瀏覽器以匿名方式獲取目標腳本。這意味著請求腳本時不會向服務端發送潛在的用戶身份信息(例如 Cookies、HTTP 證書等)。

添加跨域 HTTP 響應頭:

  1. Access-Control-Allow-Origin: * 

或者

  1. Access-Control-Allow-Origin: http://test.com 

注意:大部分主流 CDN 默認添加了 Access-Control-Allow-Origin 屬性。

完成上述兩步之后,即可通過 window.onerror 捕獲跨域腳本的報錯信息。

解決方案2

難以在 HTTP 請求響應頭中添加跨域屬性時,還可以考慮 try catch 這個備選方案。

在如下示例 HTML 頁面中加入 try catch:

  1. <!doctype html> 
  2. <html> 
  3. <head> 
  4.     <title>Test page in http://test.com</title> 
  5. </head> 
  6. <body> 
  7.     <script src="http://another-domain.com/app.js"></script> 
  8.     // app.js里面有一個foo方法,調用了不存在的bar方法 
  9.     <script> 
  10.     window.onerror = function (message, url, line, column, error) { 
  11.         console.log(message, url, line, column, error); 
  12.     } 
  13.     try { 
  14.         foo(); 
  15.     } catch (e) { 
  16.         console.log(e); 
  17.  
  18.         throw e; 
  19.     } 
  20. </script> 
  21. </body> 
  22. </html> 
  23.  
  24. // 運行輸出結果如下: 
  25.  
  26. => ReferenceError: bar is not defined 
  27. at foo (http://another-domain.com/app.js:2:3) 
  28. at http://test.com/:15:3 
  29. => "Script error."""00, undefined 

可見 try catch 中的 Console 語句輸出了完整的信息,但 window.onerror 中只能捕獲“Script error”。根據這個特點,可以在 catch 語句中手動上報捕獲的異常。

總結

上述的錯誤捕獲基本覆蓋了前端監控所需的錯誤場景,但是第三部分指出的兩個其他問題,目前解決的方式都不太***。

對于有使用框架的項目:一是需要有額外的處理流程,比如示例中就需要單獨為vue項目進行初始化;二是對于其他框架,都需要單獨處理,例如react項目的話,則需要使用官方提供的componentDidCatch方法來做錯誤捕獲。

而對于跨域js捕獲的問題:我們并不能保證所有的跨域靜態資源都添加跨域 HTTP 響應頭;而通過第二種包裹try-catch的方式進行上報,則需要考慮的場景繁多并且無法保證沒有遺漏。

雖然存在這兩點不足,但前端錯誤捕獲這部分還是和項目的使用場景密切相關的。我們可以在了解這些方式以后,選擇最適合自己項目的方案,為自己的監控工具服務。

責任編輯:張燕妮 來源: vivo互聯網技術
相關推薦

2022-10-08 15:07:06

ChatOps運維

2017-09-05 08:52:37

Git程序員命令

2021-03-08 09:15:46

日志Filebeat運維

2020-03-31 08:37:31

遞歸單鏈表反轉

2020-10-09 08:15:11

JsBridge

2021-05-11 10:01:54

avaScript錯誤處理

2018-01-09 05:39:02

2021-04-09 08:40:51

網絡保險網絡安全網絡風險

2019-04-17 15:16:00

Sparkshuffle算法

2024-06-25 08:18:55

2022-02-21 09:44:45

Git開源分布式

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺

2021-09-05 17:22:08

Strview.js工具js

2022-02-18 00:13:53

JavaScript編程語言數組

2021-11-04 10:34:02

JavaScript繼承編程

2023-04-13 08:21:38

DevOpsAPI管理平臺

2019-11-14 15:44:32

系統緩存架構

2021-05-15 09:18:04

Python進程

2021-07-01 10:01:16

JavaLinkedList集合
點贊
收藏

51CTO技術棧公眾號

粉嫩av亚洲一区二区图片| 色综合五月天| 欧美优质美女网站| 一级特黄录像免费播放全99| 亚洲国产成人一区二区| 性xx色xx综合久久久xx| xxx欧美精品| 在线黄色免费网站| 99久久精品一区二区成人| 一区二区三区四区中文字幕| 欧美日韩一区在线播放| av老司机久久| 日韩黄色一级片| 欧美激情18p| 无码人中文字幕| 欧美91在线| 欧美一区欧美二区| 国产视频一区二区三区在线播放| 尤物视频在线看| 国产欧美日韩在线看| 粉嫩av免费一区二区三区| 国产乡下妇女三片| 国产美女一区| 久久理论片午夜琪琪电影网| av在线免费播放网址| 香蕉精品久久| 亚洲第一视频网| 亚洲精品中文字幕乱码无线| 日韩av首页| 色综合欧美在线视频区| 免费毛片网站在线观看| 久久av色综合| 亚洲精品一二三| 国产91av视频在线观看| 国产精品视频一区二区久久| 91视视频在线观看入口直接观看www | 亚洲精品中文字幕有码专区| 亚洲精品一二三四| 视频欧美精品| 欧美日韩国产一级二级| 久久精品香蕉视频| 免费毛片b在线观看| 亚洲午夜三级在线| 日本男女交配视频| 日韩成人伦理| 一区二区不卡在线播放 | 成年女人在线看片| 亚洲国产一区视频| 中国一级大黄大黄大色毛片| 黄网页免费在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 免费国产一区| 黄网在线观看| 国产欧美日韩久久| 日韩欧美亚洲日产国| 国产精品视频一区二区久久| 国产欧美精品在线观看| 日韩av一区二区三区在线| 国产最新视频在线观看| 国产免费观看久久| 亚洲一卡二卡区| 黄色小网站在线观看| 亚洲另类一区二区| 亚洲色欲久久久综合网东京热| 啪啪免费视频一区| 亚洲成人综合视频| 欧美亚洲另类色图| 精品三区视频| 欧美精品777| 性xxxxxxxxx| 日本成人a网站| 亚洲图片欧美午夜| 亚洲欧洲综合网| 欧美日韩精品| 欧美中文字幕第一页| 中文字幕av久久爽| 国产精品一级黄| 好吊色欧美一区二区三区视频| 日本一卡二卡四卡精品| 中文字幕成人在线观看| 日日噜噜夜夜狠狠久久丁香五月| 国语对白在线刺激| 色美美综合视频| 91精品999| 国产成人在线中文字幕| 亚洲欧美激情另类校园| 手机在线中文字幕| 在线观看亚洲| 国产精品网站视频| 亚洲精品国产片| 国产三级三级三级精品8ⅰ区| 中文有码久久| 久草在线资源站手机版| 欧美老人xxxx18| 日本黄色动态图| 久久高清免费| 456国产精品| 一区二区三区精| 91网上在线视频| 青春草在线视频免费观看| 国产高清自产拍av在线| 欧美精品色一区二区三区| 污污污www精品国产网站| 99久久夜色精品国产亚洲1000部| 性欧美长视频免费观看不卡| 一级黄色片在线| 久久尤物电影视频在线观看| 青少年xxxxx性开放hg| 欧美日韩大片| 亚洲精品suv精品一区二区| 激情高潮到大叫狂喷水| 新狼窝色av性久久久久久| 国产精品裸体一区二区三区| 欧美三级黄网| 在线视频你懂得一区二区三区| 老熟女高潮一区二区三区| 色喇叭免费久久综合| 欧美一级片免费在线| 精品久久在线观看| 国产精品久久久久久久裸模| 免费无码不卡视频在线观看| 麻豆视频久久| 日韩亚洲成人av在线| 亚洲大片免费观看| 91丨九色丨蝌蚪富婆spa| 9色视频在线观看| 伊人亚洲精品| 日韩亚洲欧美成人| 18国产免费视频| 久久久久国产精品免费免费搜索| 久久国产精品视频在线观看| 91精品导航| 乱亲女秽乱长久久久| 在线视频1卡二卡三卡| 国产女人18水真多18精品一级做| 免费国产成人av| 色先锋久久影院av| 777午夜精品福利在线观看| 亚洲精品久久久久久无码色欲四季 | 日本在线观看高清完整版| 欧美精品久久99| 国产白丝一区二区三区| 久久精品国产精品青草| 亚洲一二三区精品| 成人在线日韩| 欧美理论片在线观看| 精品国产乱码久久久久久蜜臀网站| 中文字幕在线观看一区| 欧美一级视频在线| 中文无码久久精品| 成人黄色在线免费观看| 久久久123| 日韩av影片在线观看| 人妻丰满熟妇av无码区| 亚洲国产精品成人综合| 99re6在线观看| 海角社区69精品视频| 国产欧美日韩一区二区三区| 2018av在线| 日韩精品在线视频美女| 波多野结衣视频免费观看| 国产亚洲美州欧州综合国| 青青草精品视频在线| 羞羞答答一区二区| 国产精品久久久久久久久影视 | 久久久久久久久久亚洲| 手机av免费在线观看| 一本一道久久a久久精品综合蜜臀| 性欧美一区二区| 久久99国产精品免费| 亚洲欧美一二三| 欧美精品中文字幕亚洲专区| 国产999精品久久久| 麻豆传媒在线完整视频| 欧美videos中文字幕| 天天操夜夜操视频| 国产精品对白交换视频| 欧美日韩一区二区区别是什么 | 欧美性精品220| 久久久免费看片| 国v精品久久久网| 97公开免费视频| 亚洲天堂免费| 久久久久久九九| 亚洲免费一区| 2019中文字幕全在线观看| yjizz视频网站在线播放| 欧美一区二区免费| 亚洲av中文无码乱人伦在线视色| 中文字幕一区二区三| 久久久久久久无码| 激情综合亚洲精品| 久久久免费视频网站| 国产电影一区二区在线观看| 狠狠色狠狠色综合人人| 色噜噜成人av在线| 欧美一区二区三区四区在线| 国产传媒在线播放| 国产视频自拍一区| 精品国产免费无码久久久| 欧美性猛交丰臀xxxxx网站| 欧美成人三级视频| 国产精品视频九色porn| 极品白嫩丰满美女无套| 国产乱子伦视频一区二区三区| 青青在线视频免费| 日韩图片一区| 久久香蕉视频网站| 97欧美在线视频| 欧美成人一区二区在线| 无人区乱码一区二区三区| 国产精品亚洲精品| 怡红院成人在线| 午夜精品一区二区三区在线 | aaa日本高清在线播放免费观看| 精品日韩成人av| 国产精品久久久久久免费| 色综合视频在线观看| 日产精品久久久久| 一区二区三区国产| 三级黄色在线观看| 中文字幕欧美日本乱码一线二线| 最新中文字幕视频| 99久久99久久综合| 国产xxxxxxxxx| 高清av一区二区| 中文字幕一区二区三区人妻在线视频| 久久激情五月激情| 中文字幕国内自拍| 免费观看一级特黄欧美大片| www.99在线| 日本中文在线一区| 一区二区三区韩国| 奇米777欧美一区二区| 黄色av免费在线播放| 鲁大师影院一区二区三区| 国产av天堂无码一区二区三区| 国产尤物精品| 五十路熟女丰满大屁股 | 中文字幕国内自拍| 日本最新不卡在线| 国产精品视频分类| 美女视频一区二区三区| 亚洲精品成人在线播放| 久久99国产乱子伦精品免费| 一级黄色在线播放| 国产成人av资源| 国产免费一区二区三区最新6| av午夜一区麻豆| 日本黄色特级片| 久久久久久亚洲综合| 国产毛片久久久久久久| 欧美激情综合五月色丁香小说| av男人的天堂av| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日韩精品一线二线三线| 精品久久久久久久| 亚洲午夜激情| 国产精品xvideos88| 婷婷无套内射影院| 日韩国产欧美在线播放| 国产九九在线观看| 国产伦精品一区二区三区视频青涩 | 亚洲精品成人悠悠色影视| 久久久久久久国产视频| 红桃av永久久久| 国产精品成人无码| 日韩一级大片在线观看| 少妇精品高潮欲妇又嫩中文字幕 | 国产精品久久久久久久久久久久午夜片| 超碰精品在线| 日本一区二区在线| 亚洲mv大片欧洲mv大片| 免费成人午夜视频| 蜜桃91丨九色丨蝌蚪91桃色| 性一交一黄一片| 久久蜜臀中文字幕| 精品国产精品国产精品| 欧美日韩亚洲系列| 97超碰人人模人人人爽人人爱| 精品少妇一区二区三区在线视频| 视频午夜在线| 久久精品一本久久99精品| 成人影院在线视频| 国产日韩在线亚洲字幕中文| 久久1电影院| 中国成人亚色综合网站| 午夜影院日韩| 国产伦精品一区二区三区妓女下载| 99国产精品久久久久久久久久| 日本成人免费在线观看 | 中文一区二区在线观看| 久久久久久天堂| 欧美日韩一区 二区 三区 久久精品| www国产一区| 中文字幕久热精品在线视频| 国产乱码精品一区二三赶尸艳谈| 国产九九精品视频| 午夜欧洲一区| 日本中文字幕在线视频观看| 免费xxxx性欧美18vr| 屁屁影院国产第一页| 亚洲免费看黄网站| 亚洲天堂久久久久| 精品呦交小u女在线| 调教一区二区| 成人高清视频观看www| 亚洲欧美tv| 青草网在线观看| 国模娜娜一区二区三区| 国产一二三四五区| 欧美日韩中文在线观看| 欧性猛交ⅹxxx乱大交| 久热在线中文字幕色999舞| 影音成人av| 免费av一区二区三区| 亚洲天堂成人| 欧美污在线观看| 亚洲欧美另类在线| 国产精品亚洲lv粉色| 色偷偷偷亚洲综合网另类| 欧美性片在线观看| 麻豆一区区三区四区产品精品蜜桃| 欧美日韩ab| 少妇极品熟妇人妻无码| 亚洲色图欧美激情| 国产又粗又猛又爽又黄的| 中文字幕久久精品| 国产69精品久久久久按摩| 色视频一区二区三区| 爽好久久久欧美精品| 一本色道久久综合亚洲精品图片 | 国产剧情精品在线| 菠萝蜜影院一区二区免费| 成人在线视频免费看| 日韩偷拍一区二区| 日本女优在线视频一区二区| 卡一卡二卡三在线观看| 在线观看亚洲精品视频| 国产精品免费观看| 国产精品免费久久久久影院| 精品久久久久久久久久久aⅴ| 熟妇人妻无乱码中文字幕真矢织江| 久久久不卡网国产精品一区| 亚洲高清在线看| 视频在线观看99| 欧洲精品99毛片免费高清观看| 樱空桃在线播放| 福利一区二区在线| 亚洲视频免费播放| 精品视频一区在线视频| 性欧美1819sex性高清| 亚洲精品影院| 韩国一区二区在线观看| 欧美黑人一级片| 亚洲精品白浆高清久久久久久| 午夜影视一区二区三区| 欧美一区激情视频在线观看| 男男视频亚洲欧美| 国产人妻精品一区二区三区不卡| 欧美成人艳星乳罩| 丁香六月综合| 亚洲一区三区| 国产精品一二二区| 日本三级一区二区| 在线观看精品自拍私拍| 成人在线视频区| 久久这里只有精品23| 久久久精品影视| 国产精品一区二区免费视频| 国内精久久久久久久久久人| 精品在线91| 亚洲一区二区偷拍| 亚洲国产精品一区二区久久| 国产福利小视频在线| 91欧美视频网站| 亚洲在线一区| 日韩精品一区二区亚洲av性色 | jizz亚洲| 99久久一区三区四区免费| 亚洲在线电影| 精品国产精品国产精品| 日韩精品视频免费专区在线播放| 日本亚洲欧洲无免费码在线| 国产va亚洲va在线va| 国产精品色婷婷| 人妻少妇精品无码专区久久| 国产精品女视频| 亚洲欧洲一区| 国产精品久久久免费看| 亚洲精品大尺度| 国产午夜亚洲精品一级在线| 欧美在线观看成人| 一区二区三区自拍| 成人三级黄色免费网站| 国产麻豆日韩| 国产精品综合在线视频| 久久精品视频2| 久久免费视频网站| 国产精品毛片久久|