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

用 Vue 開發自己的 Chrome 擴展

新聞 前端
本文將向你展示如何為 Chrome 構建一個能夠改變新標簽頁行為的簡單擴展。這個擴展程序的 JavaScript 部分,我將使用 Vue.js 框架,因為它將允許我們快速啟動并運行,而且用 vue 工作是很有趣的。

 [[391841]]

瀏覽器擴展程序是可以修改和增強 Web 瀏覽器功能的小程序。它們可用于各種任務,例如阻止廣告,管理密碼,組織標簽,改變網頁的外觀和行為等等。

好消息是瀏覽器擴展并不難寫。可以用你已經熟悉的 Web 技術(HTML、CSS 和 JavaScript)創建 —— 就像普通網頁一樣。但是與網頁不同的是,擴展程序可以訪問許多特定于瀏覽器的 API,這才是有趣的地方。

在本教程中,我將向你展示如何為 Chrome 構建一個能夠改變新標簽頁行為的簡單擴展。這個擴展程序的 JavaScript 部分,我將使用 Vue.js 框架,因為它將允許我們快速啟動并運行,而且用 vue 工作是很有趣的。

Chrome 擴展程序的基礎知識

Chrome擴展程序的核心部分是 manifest 文件 和后臺腳本。manifest 文件采用JSON格式,提供有關擴展的重要信息,例如其版本、資源或所需的權限。后臺腳本允許擴展對特定的瀏覽器事件做出反應,例如創建新選項卡。

為了演示這些概念,讓我們先寫一個“Hello,World!” Chrome 擴展。

創建一個名為 hello-world-chrome 的新文件夾和兩個文件: manifest.json 和 background.js :

  1. mkdir hello-world-chrome 
  2. cd hello-world-chrome 
  3. touch manifest.json background.js 

打開 manifest.json 并添加以下代碼:

  1.   "name""Hello World Extension"
  2.   "version""0.0.1"
  3.   "manifest_version"2
  4.   "background": { 
  5.     "scripts": ["background.js"], 
  6.     "persistent"false 
  7.   } 

name 、 version 和 manifest_version 都是必填字段。 name 和 version 字段可以是你想要的任何內容; manifest version 應設置為2(從Chrome 18開始)。

background 允許我們注冊一個后臺腳本, 在 scripts 后面的數組中列出。除非擴展需要用 chrome.webRequest API來阻止或修改網絡請求,否則 persistent 鍵應設置為 false 。

將以下代碼添加到 background.js ,使瀏覽器在安裝擴展時彈出出 hello 對話框:

  1. chrome.runtime.onInstalled.addListener(() => { 
  2.   alert('Hello, World!'); 
  3. }); 

最后安裝擴展程序。打開 Chrome 并在地址欄中輸入 chrome://extensions/ 。你應該看到一個顯示已安裝擴展程序的頁面。

由于我們要從文件(而不是Chrome網上應用店)安裝自己的擴展程序,因此需要使用頁面右上角的切換按鈕來激活 開發者模式 。這應該添加一個額外的菜單欄,其中包含 Load unpacked 選項。單擊此按鈕并選擇你之前創建的 hello-world-chrome 文件夾。單擊 打開 ,應該能夠看到已安裝的擴展,并彈出“Hello,World!”窗口。

 


Hello World

 

恭喜!你剛剛制作了一個 Chrome 擴展程序。

覆蓋 Chrome 的新標簽頁

為了在打開新選項卡時迎接我們的是自己的擴展程序。可以通過使用 Override Pages API 來完成此操作。

注意:在你取得進展之前,請務必停用其他能夠覆蓋 Chrome 新標簽頁的擴展程序。一次只允許一個擴展改變這種行為。

首先創建一個要顯示的頁面,而不是新的標簽頁。我們稱之為 tab.html 。它應該與清單文件和后臺腳本位于同一文件夾中:

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3. <head> 
  4.   <meta charset="UTF-8"
  5.   <title>My New Tab Page!</title> 
  6. </head> 
  7. <body> 
  8.   <h1>My New Tab Page!</h1> 
  9.   <p>You can put any content here you like</p> 
  10. </body> 
  11. </html> 

接下來需要讓擴展知道頁面的存在。可以通過在清單文件中指定 chrome_url_overrides 來實現,如下所示:

  1. "chrome_url_overrides": { 
  2.   "newtab""tab.html" 

最后,你需要重新加載擴展才能使更改生效。你可以通過在 Chrome 的擴展程序頁面上單擊 Hello World 擴展程序的 reload 圖標來執行此操作。


重新加載擴展

 

現在,當你打開新標簽頁時,你的自定義消息會出現。

將Vue添加到擴展

現在我們有一個非常基本的擴展,接下來要實現剩下的需功能了。當用戶打開新標簽頁時,我希望擴展能夠:

  • 從精彩的笑話網站 icanhazdadjoke.com 獲取一個笑話。

  • 以良好的格式向用戶顯示該笑話。

  • 顯示用戶喜歡該笑話的按鈕。這樣可以把笑話保存到 chrome.storage 。
  • 顯示一個按鈕,供用戶查看已收藏的笑話。

當然你也可以用純 JavaScript 或像 jQuery 這樣的庫來完成所有這些 —— 你開心就好!

但是出于本教程的目的,我將用 Vue 和令人敬畏的 vue-web-extension 樣板來實現此功能。

用 Vue 可以讓我又快又好地編寫更有條理的代碼。正如我們所看到的,樣板文件提供了幾個腳本,可以在構建 Chrome 擴展程序時解決一些痛苦的常見任務(例如:每當你進行更改時都必須重新加載擴展程序)。

vue-web-extension-boilerplate

本節假定你的計算機上安裝了 Node 和 npm。如果不是這樣,你可以到 https://nodejs.org/en/ 獲取相關二進制文件,或者你可以使用版本管理器。我建議使用版本管理器。

我們還需要安裝 Vue CLI 和 @vue/cli-init package:

  1. npm install -g @vue/cli 
  2. npm install -g @vue/cli-init 

完成后,讓我們得到樣板的副本:

  1. vue init kocal/vue-web-extension new-tab-page 

這將打開一個向導,詢問你一堆問題。為了保證本教程的重點,我把回答列出來:

  1. ? Project name new-tab-page 
  2. ? Project description A Vue.js web extension 
  3. ? Author James Hibbard <jim@example.com> 
  4. ? License MIT 
  5. ? Use Mozilla's web-extension polyfill? No 
  6. ? Provide an options page? No 
  7. ? Install vue-router? No 
  8. ? Install vuex? No 
  9. ? Install axios? Yes 
  10. ? Install ESLint? No 
  11. ? Install Prettier? No 
  12. ? Automatically install dependencies? npm 

你可以根據自己的喜好調整答案,但是你一定要安裝 axios。我們會用它來獲取笑話。

接下來,切換到項目目錄并安裝依賴項:

  1. cd new-tab-page 
  2. npm install 

然后就可以用樣板提供的腳本構建我們的新擴展了:

  1. npm run watch:dev 

這會將擴展構建到項目根目錄中的 dist 文件夾中,來進行開發并監視更改。

要將擴展程序添加到 Chrome,請執行上述相同的步驟,要選擇 dist 文件夾作為擴展程序目錄。如果一切按計劃進行,那么當擴展程序初始化時,你應該看到“Hello world!”消息。

項目設置

讓我們花一點時間來看看樣板給了我們些什么。當前文件夾結構應如下所示:

  1. ├── dist 
  2. │   └── <the built extension> 
  3. ├── node_modules 
  4. │   └── <one or two files and folders> 
  5. ├── package.json 
  6. ├── package-lock.json 
  7. ├── scripts 
  8. │   ├── build-zip.js 
  9. │   └── remove-evals.js 
  10. ├── src 
  11. │   ├── background.js 
  12. │   ├── icons 
  13. │   │   ├── icon_128.png 
  14. │   │   ├── icon_48.png 
  15. │   │   └── icon.xcf 
  16. │   ├── manifest.json 
  17. │   └── popup 
  18. │       ├── App.vue 
  19. │       ├── popup.html 
  20. │       └── popup.js 
  21. └── webpack.config.js 

在項目根目錄中可以看到,樣板文件正在使用 webpack。這很好,因為這為我們的后臺腳本提供了 Hot Module Reloading。

src 文件夾包含我們將用于擴展的所有文件。manifest 文件和 background.js 對于我們來說是熟悉的,但也要注意包含Vue 組件的 popup 文件夾。當樣板文件將擴展構建到 dist 文件夾中時,它將通過 vue-loader 管理所有 .vue 文件并輸出一個瀏覽器可以理解的 JavaScript 包。

在 src 文件夾中還有一個 icons 文件夾。如果你看一眼 Chrome 的工具欄,會看到我們的擴展程序的新圖標(也被稱為 browser action)。這就是從此文件夾中拿到的。如果單擊它,你應該會看到一個彈出窗口,顯示“Hello world!” 這是由 popup/App.vue 創建的。

最后,請注 scripts 文件夾的兩個腳本:一個用于刪除 eval 用法以符合 Chrome Web Store 的內容安全策略,另一個用于當你要把擴展上傳到Chrome Web Store時將其打包到 .zip 文件中,。

在 package.json 文件中還聲明了各種腳本。我們將用 npm run watch:dev 來開發擴展,然后使用 npm run build-zip 生成一個ZIP文件以上傳到 Chrome Web Store。

在新標簽頁中使用 Vue 組件

首先從 background.js 中刪除煩人的 alert 語句。

在 src 文件夾中創建一個新的 tab 文件夾來存放新標簽頁的代碼。我們將在這個新文件夾中添加三個文件 ——   App.vue , tab.html , tab.js :

  1. mkdir src/tab 
  2. touch src/tab/{App.vue,tab.html,tab.js} 

打開 tab.html 并添加以下內容:

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3. <head> 
  4.   <meta charset="UTF-8"
  5.   <title>New Tab Page</title> 
  6.   <link rel="stylesheet" href="tab.css"
  7. </head> 
  8. <body> 
  9.   <div id="app"></div> 
  10.   <script src="tab.js"></script> 
  11. </body> 
  12. </html> 

這里沒什么特別的。這是一個簡單的 HTML 頁面,它將保存我們的 Vue 實例。

接下來在 tab.js 中添加:

  1. import Vue from 'vue'
  2. import App from './App'
  3.  
  4. new Vue({ 
  5.   el: '#app'
  6.   render: h => h(App) 
  7. }); 

在這里導入 Vue,用它為元素傳遞一個選擇器,然后告訴它渲染 App 組件。

最后在 App.vue 中寫如下代碼:

  1. <template> 
  2.   <p>{{ message }}</p> 
  3. </template> 
  4.  
  5. <script> 
  6. export default { 
  7.   data () { 
  8.     return { 
  9.       message: "My new tab page" 
  10.     } 
  11.   } 
  12. </script> 
  13.  
  14. <style scoped> 
  15. p { 
  16.   font-size: 20px; 
  17. </style> 

在使用這個新標簽頁之前,我們需要更新 manifest 文件:

  1.   "name":"new-tab-page"
  2.   ... 
  3.   "chrome_url_overrides": { 
  4.     "newtab""tab/tab.html" 
  5.   } 

為了使它們可用于擴展,我們還需要讓樣板編譯我們的文件并復制到 dist 文件夾。

像下面這樣修改 webpack.config.js ,更新 entry 和 plugins 鍵:

  1. entry: { 
  2.   'background''./background.js'
  3.   'popup/popup''./popup/popup.js'
  4.   'tab/tab''./tab/tab.js' 
  5. plugins: [ 
  6.   ... 
  7.   new CopyWebpackPlugin([ 
  8.     { from: 'icons', to: 'icons', ignore: ['icon.xcf'] }, 
  9.     { from: 'popup/popup.html', to: 'popup/popup.html', transform: transformHtml }, 
  10.     { from: 'tab/tab.html', to: 'tab/tab.html', transform: transformHtml }, 
  11.     ... 
  12.   }) 

你需要重新啟動 npm run watch:dev 任務才能使這些更改生效。完成此操作后,重新加載擴展程序并打開新選項卡。你應該會看到“My new tab page”。

 


My new tab page

 

獲取并顯示笑話

好的,我們已經覆蓋了 Chrome 的新標簽頁,并且將其替換為了 mini Vue app。但是我們要做的不僅僅是顯示一條消息。

更改 src/tab/App.vue 中的模板部分如下:

  1. <template> 
  2.   <div> 
  3.     <div v-if="loading"
  4.       <p>Loading...</p> 
  5.     </div> 
  6.     <div v-else
  7.       <p class="joke">{{ joke }}</p> 
  8.     </div> 
  9.   </div> 
  10. </template> 

將 <script> 部分更改為如下代碼:

  1. <script> 
  2. import axios from 'axios'
  3.  
  4. export default { 
  5.   data () { 
  6.     return { 
  7.       loading: true
  8.       joke: ""
  9.     } 
  10.   }, 
  11.   mounted() { 
  12.     axios.get( 
  13.       "https://icanhazdadjoke.com/"
  14.       { 'headers': { 'Accept''application/json' } } 
  15.     ) 
  16.       .then(res => { 
  17.         this.joke = res.data.joke 
  18.         this.loading = false
  19.       }); 
  20.   } 
  21. </script> 

最后,將 <style> 部分更改為如下代碼:

  1. <style> 
  2. body { 
  3.   height: 98vh; 
  4.   text-align: center; 
  5.   color: #353638
  6.   font-size: 22px; 
  7.   line-height: 30px; 
  8.   font-family: Merriweather,Georgia,serif; 
  9.   background-size: 200px; 
  10.   display: flex; 
  11.   align-items: center; 
  12.   justify-content: center; 
  13.  
  14. .joke { 
  15.   max-width: 800px; 
  16. </style> 

如果你正在運行 npm run watch:dev 任務,則擴展程序會自動重新加載,并且每當你打開新標簽頁時都會看到一個笑話。

 

一個英文笑話

 

接下來花點時間來了解一下自己都做了些什么。

在模板中,我們使用 v-if 塊來顯示加載消息或笑話,具體取決于 loading 的狀態。最初它被設置為 true (顯示加載消息),然后我們的腳本將觸發 Ajax 請求來檢索笑話。一旦 Ajax 請求完成, loading 屬性將被設置為 false ,導致組件被重新渲染并顯示笑話。

在 <script> 部分,我們導入了 axios,然后聲明了幾個數據屬性——前面提到的 loading 屬性和一個 joke 屬性來保存這個笑話。然后使用了 mount 生命周期鉤子,一旦我們的 Vue 實例被掛載就會觸發,向 joke API 發出 Ajax 請求。請求完成后,更新兩個數據屬性使組件重新渲染。

到目前為止還挺好。

將笑話持持久化到 Chrome Storage

接下來,添加一些能夠讓用戶喜歡一個笑話和列出喜歡的笑話列表的按鈕。由于我們將使用 Chrome’s storage API 來保存這些笑話,所以可能需要添加第三個按鈕來刪除 storage 中的笑話。

將按鈕添加到 v-else 塊:

  1. <div v-else
  2.   <p class="joke">{{ joke }}</p> 
  3.  
  4.   <button @click="likeJoke" :disabled="likeButtonDisabled">Like Joke</button> 
  5.   <button @click="logJokes" class="btn">Log Jokes</button> 
  6.   <button @click="clearStorage" class="btn">Clear Storage</button> 
  7. </div> 

沒有什么令人興奮的東西了。請注意我們將類似按鈕的 disabled 屬性綁定到 Vue 實例上的數據屬性來確定其狀態。這是因為用戶不應該多次喜歡一個笑話。

接下來,將 click handler 和 Like Button Disabled 添加到腳本部分:

  1. export default { 
  2.   data () { 
  3.     return { 
  4.       loading: true
  5.       joke: ""
  6.       likeButtonDisabled: false 
  7.     } 
  8.   }, 
  9.   methods: { 
  10.     likeJoke(){ 
  11.       chrome.storage.local.get("jokes", (res) => { 
  12.         if(!res.jokes) res.jokes = []; 
  13.         res.jokes.push(this.joke) 
  14.         chrome.storage.local.set(res); 
  15.         this.likeButtonDisabled = true
  16.       }); 
  17.     }, 
  18.     logJokes(){ 
  19.       chrome.storage.local.get("jokes", (res) => { 
  20.         if(res.jokes) res.jokes.map(joke => console.log(joke)) 
  21.       }); 
  22.     }, 
  23.     clearStorage(){ 
  24.       chrome.storage.local.clear(); 
  25.     } 
  26.   }, 
  27.   mounted() { ... } 

在這里,我們聲明了三個新方法來處理這三個新按鈕。

likeJoke 方法在 Chrome 的存儲中查找 jokes 屬性。如果它不存在(也就是說,用戶尚未喜歡一個笑話),會將其初始化為空數組。然后它將當前的笑話推送到此數組并將其保存到 storage。最后,將 likeButtonDisabled 數據屬性設置為 true ,并禁用 like 按鈕。

logJokes 方法還在 Chrome storage 中查找 jokes 屬性。如果找到了,會遍歷其所有條目并將它們輸出到控制臺。

clearStorage 方法負責清除數據。

繼續在擴展中調整這個新功能,直到自己滿意。

 

將笑話輸出到控制臺

 

為擴展做一些美化

它能夠工作了,但是按鈕是很丑,頁面也有點簡單。下面就要給擴展做一些潤色。

下一步,安裝 vue-awesome 庫。它能夠使我們在頁面上使用 Font Awesome 圖標,并使這些按鈕看起來更漂亮一些:

  1. npm install vue-awesome 

在 src/tab/tab.js 中對庫進行注冊:

  1. import Vue from 'vue'
  2. import App from './App'
  3. import "vue-awesome/icons"
  4. import Icon from "vue-awesome/components/Icon"
  5.  
  6. Vue.component("icon", Icon); 
  7.  
  8. new Vue({ 
  9.   el: '#app'
  10.   render: h => h(App) 
  11. }); 

修改模板:

  1. <template> 
  2.   <div> 
  3.     <div v-if="loading" class="centered"
  4.       <p>Loading...</p> 
  5.     </div> 
  6.     <div v-else
  7.       <p class="joke">{{ joke }}</p> 
  8.  
  9.       <div class="button-container"
  10.         <button @click="likeJoke" :disabled="likeButtonDisabled" class="btn"><icon name="thumbs-up"></icon></button> 
  11.         <button @click="logJokes" class="btn"><icon name="list"></icon></button> 
  12.         <button @click="clearStorage" class="btn"><icon name="trash"></icon></button> 
  13.       </div> 
  14.     </div> 
  15.   </div> 
  16. </template> 

最后,讓我們為按鈕添加更多樣式,并添加一張圖片:

  1. <style> 
  2. body { 
  3.   height: 98vh; 
  4.   text-align: center; 
  5.   color: #353638
  6.   font-size: 22px; 
  7.   line-height: 30px; 
  8.   font-family: Merriweather,Georgia,serif; 
  9.   background: url("https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2018/12/1544189726troll-dad.png") no-repeat 199%; 
  10.   background-size: 200px; 
  11.   display: flex; 
  12.   align-items: center; 
  13.   justify-content: center; 
  14.  
  15. .joke { 
  16.   max-width: 800px; 
  17.  
  18. .button-container { 
  19.   position: absolute; 
  20.   right: 0px; 
  21.   top: calc(50% - 74px); 
  22.  
  23. .btn { 
  24.   background-color: #D8D8D8; 
  25.   border: none; 
  26.   color: white; 
  27.   padding: 12px 16px; 
  28.   font-size: 16px; 
  29.   cursor: pointer; 
  30.   display: block; 
  31.   margin-bottom: 5px; 
  32.   width: 50px; 
  33.  
  34. .btn:hover { 
  35.   background-color: #C8C8C8; 
  36.  
  37. .btn:disabled { 
  38.   background-color: #909090
  39. </style> 

重新加載擴展并打開一個新標簽,你應該看到這樣的東西。

將擴展程序上傳到 Chrome Web Store

如果想讓其他人也可以使用你的擴展程序,可以通過 Chrome Web Store 做到。

首先你需要有一個 Google 帳戶,可以用該帳戶登錄 Developer Dashboard 。系統會提示你輸入開發人員詳細信息,在發布第一個應用程序之前,你必須支付 5 美元的開發人員注冊費(通過信用卡)。

接下來,你需要為自己的應用創建一個 ZIP 文件。你可以通過 npm run build-zip 在本地執行這項操作。這會在項目根目錄中創建一個名為 dist-zip 的文件夾,其中包含準備上傳到 Web Store 的 ZIP 文件。

對于簡單的小擴展,這就夠了。但是,在你上傳自己的擴展之前,請務必閱讀官方 Publish in the Chrome Web Store 指南。

在本教程中,我重點介紹了 Chrome 擴展程序的主要部分,并展示了如何用在 Vue.js 中 vue-web-extension 樣板構建擴展程序,最后講解了如何將擴展上傳到 Web Store。

希望你喜歡本教程,并用它指導你始構建自己的 Chrome 擴展。

責任編輯:張燕妮 來源: 前端先鋒
相關推薦

2022-04-18 19:02:53

chrome擴展瀏覽器

2024-03-15 08:00:00

2019-01-31 13:43:48

Spring BootStarter開發

2024-09-29 10:34:31

FlaskPythonAPI

2016-09-21 12:34:10

Chrome瀏覽器插件

2024-03-18 18:07:38

VSCode插件文件

2015-06-08 14:27:35

谷歌蘋果編程語言

2013-03-18 16:09:27

JavaEEOpenfire

2015-08-03 09:44:02

ChromeEdge 微軟

2021-06-28 07:13:34

Vue Code 擴展

2019-08-08 09:00:00

Web開發Chrome瀏覽器

2010-07-07 11:07:51

操作系統

2022-11-28 10:22:51

nodeJs開發圖床應用

2023-07-21 12:49:15

蘋果GPT人工智能

2023-04-19 15:19:23

微軟人工智能芯片

2013-08-01 15:12:43

2009-09-15 09:29:29

Google Chro擴展插件谷歌

2009-10-26 09:52:03

Google Chro翻譯擴展操作系統

2009-12-03 11:01:25

ChromeIE Tab擴展

2010-01-28 10:13:56

谷歌Chrome瀏覽器
點贊
收藏

51CTO技術棧公眾號

精品无码av一区二区三区不卡| 久久青青草原一区二区| 欧美卡一卡二卡三| 老司机aⅴ在线精品导航| 色综合色综合色综合色综合色综合 | 草草在线视频| 亚洲国产激情av| 福利视频一区二区三区| 波多野结衣二区三区| 亚洲情侣在线| 亚洲午夜精品久久久久久久久久久久 | 三级全黄做爰视频| 麻豆一区二区麻豆免费观看| 欧美日韩三级一区| 日本日本19xxxⅹhd乱影响| 婷婷免费在线视频| 91在线观看下载| 亚洲最大福利视频网| 最近免费中文字幕大全免费版视频| 亚洲第一偷拍| 国产一区二区三区在线观看网站| 性生活一级大片| 伦一区二区三区中文字幕v亚洲| 亚洲午夜久久久久久久久电影网 | 性爱视频在线播放| 欧美极品美女视频| 蜜桃精品久久久久久久免费影院| 99精品视频在线播放免费| 日韩中文字幕亚洲一区二区va在线| 欧美激情第三页| 无码人妻精品中文字幕 | 法国空姐在线观看免费| 成人在线免费视频| 91女厕偷拍女厕偷拍高清| 999久久久| 国产又黄又大又爽| 青青草97国产精品免费观看 | 亚洲视频免费在线| 亚洲精品tv久久久久久久久| 三级视频网站在线| 不卡免费追剧大全电视剧网站| 92看片淫黄大片看国产片| 免费av中文字幕| 国产欧美91| 97在线视频国产| 日产亚洲一区二区三区| 国产精品激情电影| 欧美国产在线电影| 久久久久久久久97| 黄色在线成人| 欧美激情一级精品国产| 青青草手机在线视频| 欧美淫片网站| 色在人av网站天堂精品| 欧美丰满艳妇bbwbbw| 欧美日韩一区二区国产| 欧美贵妇videos办公室| 免费在线观看日韩| 国内视频精品| 91精品国产一区| 国产视频91在线| 亚洲制服少妇| 日韩av快播网址| 超碰在线97观看| 全国精品久久少妇| 91精品国产自产在线老师啪 | 成人精品一区二区三区电影| 欧美中文字幕一区二区三区亚洲| 污污动漫在线观看| 99er精品视频| 亚洲成人av中文字幕| 黄色国产在线观看| 免费看日本一区二区| 一区二区三区视频免费| 五月天激情丁香| 精品成人免费| 国产精品99久久久久久久久 | 日韩av电影网| 久久精品主播| 成人性生交大片免费观看嘿嘿视频| 国产农村妇女毛片精品| 成人免费观看视频| 日韩电影免费观看高清完整| 美女羞羞视频在线观看| 亚洲第一在线综合网站| 色婷婷狠狠18| 99re8精品视频在线观看| 精品国产乱码久久| 摸摸摸bbb毛毛毛片| 欧美1区2区视频| 欧美一区二粉嫩精品国产一线天| 最近中文字幕在线观看| 国产成人高清视频| 日韩欧美视频一区二区| 任你弄在线视频免费观看| 一本大道av一区二区在线播放| 激情黄色小视频| 欧美久久精品| 久久国产精品影片| 中文字幕69页| 粉嫩在线一区二区三区视频| 日韩精品久久一区二区三区| 欧美黄色视屏| 在线看国产日韩| 黑人玩弄人妻一区二区三区| 水蜜桃久久夜色精品一区| 98精品国产高清在线xxxx天堂| 亚洲一区精品在线观看| 久久亚洲春色中文字幕久久久| 国产四区在线观看| 成人性生交大片免费网站| 91精品国产综合久久精品图片| 亚洲一区二区三区综合| 欧美在线三区| 国产一区二区丝袜| 狠狠色伊人亚洲综合网站l| 亚洲一区二区三区四区不卡| 无尽裸体动漫2d在线观看| 亚洲香蕉视频| 国内精品视频一区| a天堂视频在线| 国产精品嫩草99a| 蜜臀av午夜一区二区三区 | 水蜜桃亚洲精品| 欧美调教sm| 精品国精品国产尤物美女| 精品国产国产综合精品| 六月丁香婷婷久久| 日韩精品一线二线三线| 超碰国产一区| 精品中文视频在线| 国产精品xxxx喷水欧美| 成人免费va视频| 日韩精品久久一区二区| 国内精品视频| 最近日韩中文字幕中文| 久久永久免费视频| 久久久精品日韩欧美| 成人在线免费在线观看| 欧美日韩一区二区三区四区不卡| 久久久久久国产精品| 亚洲国产999| 亚洲一区在线电影| 人妻激情偷乱频一区二区三区| 亚洲国产不卡| 99精彩视频在线观看免费| 中日韩高清电影网| 日韩欧美国产一区在线观看| 欧美成人一二三区| 懂色av一区二区三区免费观看| 成人在线视频一区二区三区| 亚洲经典视频| 午夜精品一区二区三区在线| 亚洲色图21p| 好吊成人免视频| 香蕉视频久久久| 奇米精品一区二区三区在线观看一| 色播五月综合| 亚洲aⅴ网站| 欧美成人小视频| 黄色av小说在线观看| 偷拍一区二区三区四区| 醉酒壮男gay强迫野外xx| 久久三级视频| 亚洲精美视频| 精品亚洲a∨一区二区三区18| 精品中文字幕视频| 手机看片福利永久| 91福利在线免费观看| 国产wwwwxxxx| 成人综合婷婷国产精品久久蜜臀 | 国产精品一区无码| 国产欧美一区二区三区沐欲| 日本成人xxx| 亚洲免费精品| 天天综合色天天综合色hd| 老司机亚洲精品一区二区| 97香蕉久久超级碰碰高清版| 国产精品影院在线| 日韩欧美中文一区| 中文在线第一页| 亚洲精品乱码久久久久| 亚洲av片不卡无码久久| 激情综合网av| 国产原创popny丨九色 | 久久久999成人| 高清国产mv在线观看| 91福利在线导航| 久久免费公开视频| 国产拍欧美日韩视频二区| 波多野结衣网页| 另类国产ts人妖高潮视频| japanese在线视频| 综合亚洲自拍| 99re国产视频| 成人精品动漫| 97免费视频在线播放| 日日夜夜精品一区| 亚洲女人被黑人巨大进入al| 精品国产无码一区二区三区| 色综合色狠狠综合色| 玖玖爱免费视频| 国产精品网站一区| 亚洲精品国产成人av在线| 麻豆成人免费电影| 男人天堂999| 激情久久综合| 日日噜噜夜夜狠狠久久丁香五月| 精品国产乱码久久久| 国产偷久久久精品专区| 99精品女人在线观看免费视频 | 久久精品国产亚洲5555| 成人免费淫片视频软件| 成人黄色免费短视频| 久久全国免费视频| 羞羞污视频在线观看| 日日噜噜噜夜夜爽亚洲精品| 亚州男人的天堂| 精品少妇一区二区三区免费观看| 在线观看毛片网站| 色婷婷精品久久二区二区蜜臂av| 久久精品国产亚洲av麻豆色欲 | 日韩一级淫片| 国产噜噜噜噜噜久久久久久久久 | 日本aⅴ亚洲精品中文乱码| 日韩精品 欧美| 伊人久久亚洲影院| www婷婷av久久久影片| 午夜精品久久久久久久四虎美女版| 日韩成人av电影在线| 一道本一区二区三区| 久久本道综合色狠狠五月| 超碰成人在线观看| 爱情岛论坛亚洲入口| 欧美久久亚洲| 亚洲综合国产精品| 一区二区日韩| 国产高清自拍99| 日韩成人18| av一区二区三区四区电影| 亚洲一区电影| 成人看片视频| 999精品视频在这里| 成人午夜影院在线观看| 一区二区三区在线资源| 999国产在线| 美女福利一区| 久久久久久久久久久久久久一区 | 亚洲毛片一区二区| 狠狠v欧美ⅴ日韩v亚洲v大胸| 亚洲最大在线视频| 日本免费在线观看| 深夜福利一区二区| а√天堂资源地址在线下载| 欧美人在线视频| 97蜜桃久久| 国产成人精品午夜| 免费视频成人| 91中文字幕在线观看| 99亚洲乱人伦aⅴ精品| 精品高清视频| 啪啪亚洲精品| 一级一片免费播放| 亚洲一级网站| 日本不卡在线观看视频| 日韩在线一二三区| 欧美美女性视频| 成人性视频免费网站| 中文字幕一二三四区| 国产精品不卡在线| 欧美日韩成人免费观看| 日韩欧美精品在线观看| 国产又粗又猛又爽| 精品久久久久久久久久久久久久久久久| 午夜小视频在线播放| 伊人精品在线观看| 91国内在线| 欧美一区二区三区…… | 一本一生久久a久久精品综合蜜| 999精品在线| 欧美黑人经典片免费观看 | 欧美一区二区免费在线观看| 国产网站一区二区| 国产极品国产极品| 欧美午夜宅男影院在线观看| 一区二区www| 亚洲国产精品字幕| 人人干在线视频| 98视频在线噜噜噜国产| 精品美女一区| 久久人人97超碰人人澡爱香蕉| 久久精品亚洲人成影院| 亚洲色成人一区二区三区小说| 久久精品二区亚洲w码| 一级特黄a大片免费| 综合久久国产九一剧情麻豆| 亚洲天堂一区在线| 日韩视频免费观看高清完整版| 欧美在线观看在线观看| 欧美成人精品xxx| 影视一区二区三区| 国产精品国产一区二区| 日韩在线不卡| 精品99在线视频| 国产成人免费视频| 东京热无码av男人的天堂| 亚洲成av人片一区二区| 国产男男gay体育生白袜| 国产性猛交xxxx免费看久久| av剧情在线观看| 91香蕉国产在线观看| 欧美精品系列| 国产又黄又大又粗视频| 成人精品视频网站| 极品颜值美女露脸啪啪| 欧美日韩精品系列| 精品欧美不卡一区二区在线观看 | 日韩一级理论片| 99精品热视频| 日本a在线观看| 日韩一区二区三区高清免费看看| 日本美女在线中文版| 国产精品1234| 蜜臀av免费一区二区三区| av日韩一区二区三区| 国产精品一区二区在线观看不卡 | 羞羞答答国产精品www一本| 国产性猛交96| 一区二区在线观看免费| 国产精品无码AV| 久久精品国产欧美亚洲人人爽| 电影一区电影二区| 日本免费高清一区二区| 三级影片在线观看欧美日韩一区二区 | 久久久精品视频网站| 日韩经典第一页| 男女羞羞在线观看| 蜜桃91精品入口| 久久久久国产精品午夜一区| 一卡二卡三卡四卡| 色婷婷久久久久swag精品| 国产在线你懂得| 国产精品www网站| 欧美日韩伦理| 天天操,天天操| 国产精品成人免费在线| 国产精品久久综合青草亚洲AV| xxxxxxxxx欧美| 国产精品日本一区二区三区在线 | 日本成人黄色| 毛片一区二区三区| 麻豆明星ai换脸视频| 日韩精品影音先锋| 成年男女免费视频网站不卡| 久久精品国产一区二区三区日韩 | av在线网站观看| 在线日韩国产精品| h视频网站在线观看| 91精品久久久久久久久| 欧美va天堂| 国产麻豆剧传媒精品国产av| 狠狠操狠狠色综合网| 大胆av不用播放器在线播放| 国产欧美日韩视频| 欧美私人啪啪vps| www.免费av| 精品视频色一区| 日本欧美电影在线观看| 久久久神马电影| 日韩精品成人一区二区在线| 日韩一卡二卡在线观看| 日韩免费一区二区| 三上悠亚激情av一区二区三区| 亚洲欧美国产精品桃花| 国产大片一区二区| 日韩精品一区二区亚洲av| 中文字幕日韩在线观看| 在线观看视频一区二区三区| 日本在线观看a| 亚洲三级在线免费观看| 午夜在线视频免费| 国产精品一区二区三区成人| 激情综合电影网| 久久午夜精品视频| 精品国产乱码久久| 国产精品久久久久77777丨| 欧美乱大交xxxxx潮喷l头像| 国产情人综合久久777777| 性猛交富婆╳xxx乱大交天津| 热99精品里视频精品| 亚洲a在线视频| 日韩丰满少妇无码内射| 日韩精品一区二区三区在线观看 | 水蜜桃在线免费观看| 91麻豆文化传媒在线观看| 国产情侣在线播放| 日韩av电影在线免费播放| 韩日成人av| 欧美特黄一级片| 亚洲天堂第一页|