国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

前端拓展:如何開發(fā)一個 Chrome 插件?

共 17993字,需瀏覽 36分鐘

 ·

2021-03-02 15:52

什么是瀏覽器插件?

簡單來說瀏覽器插件,是瀏覽器上的一種工具,可以提供一些瀏覽器沒有的功能,幫你做一些有趣的事情。開發(fā)者可以根據(jù)自己的喜歡,去實現(xiàn)一些功能。插件基于Web技術(html、css、js)構建。

舉個栗子??

FeHelper.JSON插件


功能:格式化JSON、編碼轉化、markdown、代碼壓縮等功能。

二維碼生成器


功能:可以根據(jù)當前瀏覽的網(wǎng)頁地址,生成一個二維碼。

SwitchyOmega Proxy


功能:你懂的。

Hello World

manifest.json

Chrome 瀏覽器插件沒有嚴格的文件結構約束,只需要保證文件夾根目錄有 manifest.json 文件**,**該文件的內(nèi)容會概括插件所需的資源、權限等等。

一個段簡單的示例:

{
    "manifest_version": 2, // 必填
    "name""my-plugin", // 必填
    "version""0.1.0" // 必填
}

manifest_version:代表了manifest文件的版本,瀏覽器會根據(jù)這個值去指定該版本擁有的功能。

name:插件的名稱。

version:插件版本。

將manifest.json文件放到一個文件夾內(nèi)。

chrome://extensions/

在瀏覽器地址欄輸入chrome://extensions/打開“拓展程序”頁面。

注意:需要啟用右上角的 “開發(fā)者模式” 才能加載已解壓的插件文件:


加載已解壓的插件

啟用之后點擊加載已解壓的拓展程序,選擇剛剛我們放入了manifest.json的文件夾,之后你會看到:

新增了一個我們剛剛添加的插件,而且瀏覽器右上角也會有我們的一個圖標:

此時已經(jīng)加載了一個插件了,但是這個插件除了占用瀏覽器的一個位置除外,沒有任何作用。

如果沒有設置插件圖標,那么插件的第一個字符會成為插件的默認icon。

讓插件看起來更“插件”一點

為了讓這個插件更“完善”一點,我們給它加一個icon和描述,并且點擊出現(xiàn)一個popup頁面,popup 頁面一般用來承載臨時性的交互,且生命周期很短:單擊圖標打開popup,焦點離開又立即關閉,可以通過default_popup字段來定義。

{
  .....

  "description""這是一段描述",
  // 插件管理頁面的icon
  "icons": {
    "84""./icon/ball.png"
  },
  // 瀏覽器右上角的圖標和內(nèi)容
  "browser_action": {
    "default_icon""./icon/ball.png",
    "default_title""我的插件",
    "default_popup""./html/popup.html"
  }
}

此時我們的目錄結構也變成了這樣:

給popup.html加上內(nèi)容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>my-plugin</title>
</head>
<body>
    <p style="width: 200px;text-align:center;">hello world!!</p>
</body>
</html>

之后,我們點擊插件右下角的“刷新”按鈕:

你會發(fā)現(xiàn)插件有了icon和描述:

并且右上角的icon也變了,點擊一下,會彈出我們剛剛編寫的popup.html頁面:

現(xiàn)在,我們一個“完整”的插件就已經(jīng)做好了。

manifest.json 配置介紹

background

{
    ...
    "background": {
        // 提供一個頁面給background
        "page""./html/background.html"
        // 或者若干個js文件,后臺會默認生成一個空白的html
        "scripts": ["./js/background.js"]
    }
}

background配置項,為插件的后臺常駐頁面,生命周期隨著瀏覽器的生命周期一樣,瀏覽器一啟動,后臺頁面就會開始運行,直到瀏覽器被關閉;或者在插件管理頁面,將該插件禁用了,后臺頁面也會停止運行。

另外,background擁有的權限比較高,幾乎可以調(diào)用所有的Chrome擴展API(除了devtools),同時擁有直接跨域的能力。

page:指定一個網(wǎng)頁為后臺頁面。

scripts:指定若干個js文件,后臺會自動生成一個html,并按順序調(diào)用這些js文件。

注意:pagescripts 選項只能二選一,不然會報錯。

配置好之后,屬性插件,會出現(xiàn)一個背景頁選項:

我使用的是一個background.js文件:
function _back() {
  console.log('background.js')
}
console.log('running...')

點進去看看里面裝的什么玩意:

沒錯,是一個普通的后臺頁面,如果background.js和其他頁面有通信,則可以在這里進行查看請求或者調(diào)試代碼。

如果使用page選項,打開也是這個樣子。

另外:由于background是一直在后臺運行的,為了優(yōu)化性能,可以增加一個配置:

{
    ...
    "background": {
        ...
        "persistent"false
    }
}

這樣,插件就會在被需要時加載,在空閑時被關閉。比如安裝、更新插件的時候,或者有其他頁面與background通信的時候才會被加載。

content-scripts

content-scripts能夠在合適的時機(頁面載入前、載入后、空閑時)注入腳本,允許內(nèi)容腳本更改其JavaScript環(huán)境,而不與頁面或其他內(nèi)容腳本發(fā)生沖突。

例如,原頁面有個按鈕,并且給按鈕添加了一個點擊事件:

<html>
    <button id="mybutton">click me</button>
    <script>
      var greeting = "hello, ";
      var button = document.getElementById("mybutton");
      button.person_name = "Bob";
      button.addEventListener("click"function() {
        alert(greeting + button.person_name + ".");
      }, false);
    </script>
  </html>

在content-scripts中,加入以下代碼:

var greeting = "hola, ";
var button = document.getElementById("mybutton");
button.person_name = "Roberto";
button.addEventListener("click"function() {
alert(greeting + button.person_name + ".");
}, false);

當頁面運行之后,腳本內(nèi)容也會在插件定義的時間運行,當頁面點擊按鈕時,會出現(xiàn)兩次彈窗。

content-scripts配置:

{
    ...
    "content_scripts": [
        {
          // 在匹配的URL中運行,<all_urls>表示所有的URL都會運行。
          "matches": ["<all_urls>"],
          // 注入的js,會按順序運行。
          "js": ["./js/content.js"],
          // css引入需謹慎,因為可能會影響全局的樣式,同樣也能接收多個css文件,會按順序插入到頁面中
          "css": ["./css/style.css"],
          // 代碼注入的時機,可選值: "document_start""document_end", or "document_idle",最后一個表示頁面空閑時,默認document_idle
          "run_at""document_start"
        },
        {
          "matches": ["https://www.baidu.com/"],
          "js": ["./js/other.js"],
          "run_at""document_start"
        }
      ],
    ...
}

content.js代碼如下:

console.log('hello, from content.js');

other.js代碼如下:

console.log('hello, from other.js...')

更新插件,當在 https://bytedance.feishu.cn/drive/home/運行時:

因為【 https://bytedance.feishu.cn/drive/home/】只匹配到了<all_urls>的規(guī)則,所以之后運行content.js

當在https://www.baidu.com/運行時:

同時命中了2個規(guī)則,所以content.js和other.js都會運行,順序也是正確的。

content-scripts 和原始頁面共享DOM,但是不共享JS,如要訪問頁面JS(例如某個JS變量),只能通過inject-scripts來實現(xiàn)。content-scripts能夠訪問的Chrome API的權限也比較低,只能訪問以下四個API:

  • chrome.extension(getURL , inIncognitoContext , lastError , onRequest , sendRequest)
  • chrome.i18n
  • chrome.runtime(connect , getManifest , getURL , id , onConnect , onMessage , sendMessage)
  • chrome.storage

Inject-scripts

inject-scripts 是通過DOM操作插入的JS代碼,通常在content-scripts只能操作DOM,但是卻無法訪問頁面的JS,借助content-scripts可以操作DOM的能力,往頁面中插入JS文件,給頁面提供調(diào)用插件API的能力,以及和background通信的能力。

在插入之前,需配置一下web可訪問的資源,同時content-scripts的調(diào)用時機換成"document_end"或者"document_idle",不然會無法獲取DOM,導致插入失敗。在manifest.json中添加以下內(nèi)容:

{
    ...
    "content_scripts": [
        {
          "matches": ["<all_urls>"],
          "js": ["./js/content.js"],
          "run_at""document_end"
        },
        ...
     ],
    "web_accessible_resources": ["js/inject.js"],
    ...
}

inject.js的內(nèi)容如下:

function mockApi () {
  console.log('this is from inject.js')
}

content.js增加以下代碼:

(function () {
  let path = 'js/inject.js';
  let script = document.createElement('script');
  script.setAttribute('type''text/javascript');
  // 注意,路徑需用Chrome API 生成,這個方法可以獲得插件的資源的真實路徑。
  // 類似:chrome-extension://ihcokhadfjfchaeagdoclpnjdiokfakg/js/inject.js
  script.src = chrome.extension.getURL(path);
  script.onload = function () {
    // 在執(zhí)行完代碼之后移除script標簽
    this.parentNode.removeChild(this);
  }
  document.body.appendChild(script);
})();

更新插件后,頁面就可以訪問inject.js的方法:

permissions

插件后臺有的操作需要配置相應的權限,例如本地存儲、網(wǎng)絡請求、通知等等,示例:

{
    ...
    "permissions": [
        "contextMenus", // 右鍵菜單
        "tabs", // 標簽
        "notifications", // 通知
        "webRequest", // web請求
        "webRequestBlocking",
        "storage" // 插件本地存儲
    ],
    ...
}

完整的manifest配置

官方文檔:https://developer.chrome.com/extensions/manifest

通信

popup和background通信

popup可以通過 chrome.extension.getBackgroundPage() API 直接獲取到background的上下文,從而調(diào)用background的方法來通信:

// popup.js
var backend = chrome.extension.getBackgroundPage();
backend.test(); // 訪問bbackground的函數(shù)

background可以通過chrome.extension.getViews({type:'popup'}) 獲取到popup的上下文,前提是popup頁面是打開的狀態(tài)下。

let views = chrome.extension.getViews({type:'popup'});
let popup = null
if(views.length > 0) {
    popup = views[0];
    // 直接訪問popup的函數(shù)
    popup.test();
}

這里需要注意一點:

在popup頁面,你如果想編寫js,請將js編寫在一個文件里面,然后引入進來,不然會報錯,這是因為Chrome的安全政策規(guī)定的:https://developer.chrome.com/extensions/contentSecurityPolicy

popup錯誤示范:

<!DOCTYPE html>
<html lang="en">
<head>
   ...
</head>
<body>
    <p style="width: 200px;text-align:center;">hello world!!</p>
    <script>
        // 不能直接在里面寫
    </script>
</body>
</html>

正確姿勢:

<!DOCTYPE html>
<html lang="en">
<head>
    ...
</head>
<body>
    <p style="width: 200px;text-align:center;">hello world!!</p>
    <script src="../js/popup.js"></script>
</body>
</html>

content-scripts和background通信

content-scripts可以通過 chrome.runtime.sendMessage(message) 給background發(fā)送消息:

chrome.runtime.sendMessage('message content', (res) => {
    console.log('from background:', res)
});

background通過chrome.runtime.onMessage.addListener()監(jiān)聽content-scripts發(fā)送的消息:

chrome.runtime.onMessage.addListener(function(message, sender, callback) {
   console.log(mesasge); // meesage content
   callback && callback('yes this from background')
});

background主動給content-scripts發(fā)消息,首先得查找要給哪個tab發(fā)消息,使用chrome.tabs.query 這個方法查找到tab,再使用chrome.tabs.sendMessage 方法給tab發(fā)消息:

// {active: true, currentWindow: true} 表示查找當前屏幕下的active狀態(tài)的tab;
chrome.tabs.query({active: true, currentWindow: true}, function (tabs) {
    chrome.tabs.sendMessage(tabs[0].id, 'message content', (res) => {
        console.log('from content:', res)
    });
});

content-scripts通過chrome.runtime.onMessage.addListener 去監(jiān)聽事件:

chrome.runtime.onMessage.addListener(function (message, sender, callback) {
    console.log(message, sender)
    callback && callback('yes this from content')
});

注意:

1.消息內(nèi)容可以直接發(fā)送JSON格式的對象。

2.popup和content的通信方式與上面一樣。

3.如果popup和background都監(jiān)聽了從content發(fā)來的消息,兩者都能收到監(jiān)聽消息,但是callback只會觸發(fā)一次,被誰觸發(fā)取決與誰先發(fā)送。

inject-scripts和content-scripts

inject-scripts和content-scripts通信有兩種方法:

1.window.postMessage發(fā)送,window.addEventListener接收

2.還有一種是自定義的DOM事件;

但是很少情況會是content-scripts去調(diào)inject-scripts,因為,可以,但是沒必要....content-scripts完全可以自己處理一些API的事件監(jiān)聽,況且inject-scripts也只是content-scripts生成并插入到DOM里面的,所以在content-scripts眼里,inject-scripts就是個弟弟...

但是,很多用戶觸發(fā)的事件,需要通過inject-scripts告訴content-scripts,content-scripts再給background通信并且去做一些事情,然后再發(fā)消息告訴inject-scripts,從這個角度看:content-scripts就是一個inject-scripts的工具人!

(扯平了,完美。)

inject-scripts給content-scripts發(fā)消息:

window.postMessage({"test"'你好!工具人!'}, '*');

content-scripts接收消息:

window.addEventListener("message"function(message) {
    console.log('來了老弟!', message.data);
}, false);

同樣的,content-scripts給inject-scripts發(fā)消息是一樣的。

練練手:HTTP Header 插件

實現(xiàn)一個HTTP Header 插件,可以實現(xiàn)動態(tài)添加header,并且給網(wǎng)絡請求自動加上header,header參數(shù)可以配置。

示例圖:

Background 功能設計

background復制存儲、操作headers,對所有瀏覽器請求做一層攔截,并加上啟用的headers。

注意:因為涉及到網(wǎng)絡請求,所以需在manifest.json中添加權限:

{
    ...
    "permissions": [
        "storage", // 本地存儲
        "webRequest", // 網(wǎng)絡請求
        "webRequestBlocking", // 網(wǎng)絡請求 阻塞式
        "<all_urls>" // 匹配的URL
    ]
    ...
}

Background 功能偽代碼:

// headers數(shù)據(jù)結構, 附帶默認值;(可以改為本地存儲)。
const headers = [
    {
    key: 'Content-Type',
    value: 'application/x-www-form-urlencoded',
    enablefalse,
  },
  {
    key: 'Test-Header',
    value: '按F進入坦克',
    enabletrue,
  },
];

// 獲取、新增、刪除、啟用禁用
function getHeaders () {
    return headers;
}
function addHeader (header) {
    headers.push(header);
}
function deleteHeader (index) {
    headers.splice(index, 1);
}

function toggleHeader(index) {
  headers[index].enable = !headers[index].enable;
}
...

// 請求攔截器
// On install 在被安裝的時候去初始化
chrome.runtime.onInstalled.addListener(function(){
    // 添加事件  
    chrome.webRequest.onBeforeSendHeaders.addListener(requestHandle, {
        urls: ["<all_urls>"],// 攔截所有URL的請求
    },["blocking""requestHeaders"]); // 阻塞式
    console.log('load');
});

// 添加header
function requestHandle(request) {
    let requestHeaders = request.requestHeaders;
    // 添加headers
    headers.forEach(item => {
        if (item.enable) {
            requestHeaders.push({
                name: item.key,
                value: item.value,
            });
        }
    });
    return {requestHeaders};
}

chrome.webRequest的生命周期:

詳細參考:https://developer.chrome.com/extensions/webRequest

popup 頁面設計

popup頁面提供增加、刪除、啟用禁用功能接口,并且在每次打開popup頁面的時候去background獲取最新的header數(shù)據(jù),展示在前臺。

popup.js 功能偽代碼:

// popup頁面被打開時,去后臺獲取最新header
window.onload = function () {
    let backend = chrome.extension.getBackgroundPage();
    // 調(diào)用background方法,獲得headers
    let headers = backend.getHeaders();
    // 渲染header
    createElement(headers);
}

// 增加按鈕
function addHeader() {
    let backend = chrome.extension.getBackgroundPage();
    let key = document.querySelector('.key');
    let value =  document.querySelector('.value');
    let header = {
        key: key.value,
        value: value.value,
        enabletrue
      }
    // 調(diào)用background方法,新增headers
    backend.addHeader(header);
    createElement(header);
}
// 啟用禁用、刪除功能
function toggleHeader(index) {
  let backend = chrome.extension.getBackgroundPage();
  backend.toggleHeader(index);
}

function delHeader(index) {
  let backend = chrome.extension.getBackgroundPage();
  backend.deleteHeader(index);
}

效果

打開popup,添加一個header:

隨便打開一個網(wǎng)頁,打開控制臺查看RequestHeaders:

總結

  • 很多權限、功能需要在manifest.json配置。
  • content-scripts、popup、background、inject-scripts擁有的權限不一樣,通信方式也不一樣,理解各個腳本的特點,組合使用。
  • 開發(fā)調(diào)試可在后臺背景頁查看信息,popup、inject-scripts、content-scripts可直接審查元素調(diào)試。

Chrome 插件還有很多功能這里沒有詳細介紹,例如devtools。感興趣的同學可以查閱下面的參考文檔。

參考文檔

官方文檔:https://developer.chrome.com/extensions

參考博客:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html


瀏覽 72
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日韩成人黄色视频| 久草com| 亚洲日韩欧美性爱| 豆花视频| 一本色道久久综合狠狠躁的推荐| 国产精品日韩高清北条麻衣| 亚洲欧美激情小说另类| 日本三级片视频不卡| 亚洲卡一卡二| 亚洲精品熟女| 少妇高潮在线| V片免费看| 被男友内S~高H文| 91青青| 亚洲天堂成人网| 天堂va欧美va亚洲va在线| 日韩av综合| 蜜桃av秘一区二区三区| 日日av| 日韩欧美内射| 啪一啪操一操| 色色五月丁香| 色噜噜一区二区| 影音先锋人妻限定| 黄色三级视频在线观看| 九九九成人| 亚洲欧美成人在线观看| 一插菊花网| 日本三级片无码| 嫩草视频在线观看免费网站| www.俺去也| 九九乱伦| 亚洲精品无码a片| 国产精品秘ThePorn| 亚洲欧洲精品成人久久曰影片| 翔田千里被躁120分钟| 麻豆国产91在线播放| 国产成人免费观看| 激情深爱五月| 成年视频网站| 国产第五页| 亚洲日韩AV电影| 中文无码日韩| www.日韩| 色五月丁香婷婷| 黄色A片在线观看| 久操欧美| 一道AV| 日韩毛片在线免费观看| 无码精品一区二区三区在线观看 | 亚洲性生活| 91在线精品视频| 青娱乐成人| 国产成人午夜福利在线| 成人av中文字幕| 水果派解说av| 亚洲精品女人| 五月婷婷五月丁香| 男人的天堂色琪琪| 91亚色视频| 国精品无码人妻一区二区三区免费| 国产视频导航| 亚洲精品国产AV| 一区二区三区中文字幕| 综合AV| 精品乱子伦一区二区三区在线播放 | www.国产在线观看| 国产精品va| 蜜臀99久久精品久久久懂爱| 久操青青| 最新免费一区二区三区| 免费在线观看亚洲| 欧美三级视频在线| 在线不卡无码| 欧美操逼大全| 又粗又硬又爽18级A片| 国产欧美一区二区三区视频| 天天色图| 欧美一区二区三区在线观看| 在线观看高清无码视频| 3D动漫精品啪啪一区二区下载| 一级AA毛片| 亚洲激情视频在线观看| 俺来也俺去也www色官网| 欧洲一区在线观看| 蜜桃成人无码区免费视频网站 | 亚欧成人网站| 免费的av网站| 成人AV三级片| 老熟妇搡BBBB搡BBBB| 久久婷婷婬片A片AAA| 天天看天天爽| www.re99| a√天堂资源中文8| A片黄色视频| 国产AV电影网| 亚洲精品白浆高清久久久久久| 久热这里只有| 人人av在线| 国产成人视频在线播放| av操逼网| 成人黄色网址| 国产无码一| 天天扣天天操| 久久精品水多多www| 国产浮力草草| 成人毛片在线播放免费| 就去色色五月丁香婷婷久久久| 免费看黄片网站| 欧美日韩一区二区三区| 免费黄色AV| 一区二区三区不卡视频| 大香蕉人妻| 大香蕉一区二区三区| 不卡在线视频| 日韩无码久久久| 日韩操逼网| 插逼网站| 国产精品123| 亚洲黄色电影在线观看| 精品久| 高清无码免费视频| 國產美女AV操逼網站| 日韩在线一区二区三区| 插进去综合图| 亚洲AV成人片色在线观看麻豆| 中国熟女网站| 日逼99| 竹菊影视一区二区三区| 在线观看免费欧美操逼视频| 91丨人妻丨国产| 欧美自拍一区| gogogo免费高清在线偷拍| 成人五月天黄色电影| 国产高清激情| 狠狠操天天操| 精品热99| AV在线四季综合网站| 91精品久| 182av| 日韩在线视频免费播放| 九九久热| 牛牛影视av老牛影视av| 中文字幕11页| 高清无码三级| 日韩黄色三级片| 午夜精品秘一区二区三区| 69av在线观看| 小佟丽娅大战91哥| 久久久精品久久| 操国产美女| 激情五月天色色| av网站导航| 免费播放黄色成人片| 丁香六月婷婷综合激情欧美| 国产在线A片| 日韩午夜电影| 欧美日韩视频在线播放| 亚洲精品无码久久久| 欧美丰满少妇人妻精品| 午夜国产| 成人性生活A级毛片网站| 婷婷激情丁香五月天| 在线看片国产| 日逼老女人| 国精品无码人妻一区二区三区| 天堂在线中文网| 男人天堂新地址| 精品一区二区三区在线观看| 美女天天肏| 婷婷久| 最近中文字幕免费mv第一季歌词強上 | 亚洲高清电影| 四虎成人无码| 亚洲激情四射| 欧美成人大香蕉| 亚洲天堂一区| 99久久99久国产黄毛片| 1024手机在线观看| 东京热视频网址| 中文字字幕在线| 日韩精品一二区| 国产精品视频免费看| 91久久婷婷| 亚洲无码视频观看| 日韩AAA在线| 天天日天天爱| 国产欧美综合三级伦| 2025国产在线| 四虎综合| 一区二区三区四区久久| 国产一区二区三区在线| 精品孕妇一级A片免费看| 亚洲Av无码午夜国产精品色软件| 欧美91视频| 91抽插| 尤物免费视频| 日本人妻中文字幕| 日本久久人体视频| 香蕉毛片| 国精产品乱码一区一区三区四区| 国产成人女人在线观看| 成人做爰黄级A片免费看土方| 韩国无码高清视频| 成人AV三级片| 国产免费黄色片| 无码人妻一区二区三区| 精品蜜桃一区内容| 国产乱码一区二区三区| 老太老熟女城中层露脸60| 亚洲黄色视频网站在线观看 | 日韩一页| 免费看一级高潮毛片| 青青操天天干| 五月婷婷丁香网| 强开小嫩苞一区二区电影| 国产欧美日韩在线观看| 中文字幕亚洲精品| 国产女人18毛片水18精品软件| 亚洲AV无码成人片在线| 亚洲.欧美.丝袜.中文.综合 | 国产日韩欧美在线| 久色入口| 乱伦内射视频| 国产口爆在线| 黄片大全在线观看| 成人aV免费观看| 日本成人不卡| 欧美高潮视频| 午夜成人免费视频| 国产精品美女| 山东乱子伦视频国产| 99re国产视频| 国产靠逼视频| 天天干天天操天天射| 日韩AV毛| 成人小说亚洲一区二区三区| 婷婷五月丁香色| 色伊人| 五月天干美女| 伊人666| 偷拍-91爱爱| 97在线国产| 插菊花综合| 天天日综合网| 欧美日韩小电影| 青娱乐久久| 老骚老B老太太A片| 激情二区| 中文在线免费看视频| 青青久操| 午夜无码鲁丝午夜免费| 久久综合大香蕉| 影音先锋av资源在线| 豆花成人视频| 日本久久人体视频| 亚洲毛片亚洲毛片亚洲毛片 | 国产黄色视频免费在线观看| 成人激情综合网| 麻豆av人人乐| 午夜xxx| 人人妻人人玩人人澡人人爽| 高清免费无码视频| 日韩A片免费| 欧美日韩一区二区在线| 大香蕉伊人网站| 日韩国产在线观看| 欧美色逼| 中文字幕手机在线视频| 日本草逼| 四虎激情| 国产粉嫩在线观看| 91婷婷五月天| 午夜操一操一级| 国产精品国产三级国产AⅤ中文| 久久久久久久久久8888| 成人在线免费观看视频| 欧美日韩免费观看视频| 豆花天天吃最新视频| 黄色免费片| 亚州AV在线| 免费久草视频| 人人妻人人澡人人爽人人DVD | 亚洲天堂在线视频| 国产乱子伦| 天天操夜操| 国产激情综合五月久久| 豆花视频在线播放| 亚洲高清无码视频在线| 激情乱伦视频| 豆花成人网站在线看| 欧美中文字幕在线播放| 操逼免费观看| 婷婷色色五月| 国产无套免费网站69| 日韩性爱在线| 国产一级二级三级久久久| 一区二区视频在线| 肉片无遮挡一区二区三区免费观看视频 | 亚洲天堂视频在线播放| 日韩无码性爱| 国产免费av在线观看| 国产午夜成人免费看片无遮挡| 国产成人精品一区二区三区在线| 日本a片免费| 在线观看国产小视频| 精品视频| 三级高清无码视频| 国产91精品久久久天天| 欧美日韩国产在线观看| 先锋AV资源站| 国产精品va| 天堂资源地址在线| 在线观看视频你懂的| 日韩在线视频网站| 国产在线观看黄| 国产区欧美去区在线| 国产激情AV| 精品久久免费一区二区三区| 亚欧洲精品在线视频免费观看| 国产欧美一区在线看| 91免费福利视频| 国产三级片在线免费观看| 性毛片| 天堂一区二区18| 青草免费视频| 少妇做爱特级AAA| 91人妻在线视频| 国产拍拍视频| 亚洲欧美卡通| 一区二区三区在线看| 久久激情av| 日韩福利电影| 青青操人人操| 成人黄色视频免费| 老师机性爱视频在线播放| 伊人婷婷大香蕉| 亚洲无码AV电影| 16一17女人毛片| 色婷婷综合激情| 亚洲丁香五月激情| 91精品日韩| 亚洲v| 嫩草嫩草69| 激情五月丁香婷婷| 五月丁香中文| 五月婷婷基地| 中文字幕www一区| 美日韩免费视频| 无码av亚洲一区二区毛片公司| 亚洲日韩欧美中在线| 91免费在线| 高清无码一级片| 国产2区| 久草三级片| 美女久久久| 精品动漫3D一区二区三区免费版| 操逼逼网| 国产精品系列视频| 久久群交| 蜜桃视频一区二区| 色色欧美视频| 欧美国产操逼| HEZ-502搭讪绝品人妻系列| 久久伊人大香蕉| 婷婷丁香五月网| 午夜亚洲精品| 黄片亚洲| 欧美AAAAAA视频| 77777精品成人免费A片| 夜色福利视频| av不卡免费观看| 亚洲精品一区二区三区四区五区六区 | 丰臀肥逼高清视频电影播放| 亚洲色图第一页| 俺去啦在线视频| 小佟丽娅大战91哥| 免费欧美黄色| 久久理伦| 特级爱爱视频| 青娱乐国产在线视频| 国产45页| 大炕上公让我高潮了六次| 亚洲口爆| 青草视频在线观看免费| 亚洲AV无码一区东京热久久| 黄色视频在线免费观看高清视频| 男人天堂免费视频| 综合天堂AV久久久久久久| 日本乱轮视频| 噜噜噜在线| 91天天综合在线| 成人久久久久一级大黄毛片中国| 蜜臀在线视频| 婷婷69| 日本色色视频| 欧美激情一区二区A片成人牛牛| 国产三级国产三级国产| 六月丁香五月天| av东方在线| 欧美成人毛片| 久操网在线| 无码v| 高清无码不卡视频| 亚洲中文无码字幕| 一级草逼| 亚洲国产精品久久人人爱| 超碰在线免费播放| 欧美黄色大片| 淫色网址| 99精品久久久久久无码| 欧美爱爱免费看| 亚洲综合天堂| sm视频网站| 国产性爱网址| 少妇AAA级久久久无码精品片 | 成人视频免费在线观看| 人人色在线观看| 17.3c一起起草| 欧美熟妇搡BBBB搡BBBBB| 另类小说五月天| 精品国产免费无码久久噜噜噜AV | 日本熟妇在线| 尤物无码| 日韩一级内射| 爱搞逼综合网| 免费网站观看www在线观| 91国黄色毛片在线观看| 亚洲黄色视频网站在线观看| 欧美乱轮| 人人色视频| 久久香蕉电影| 日韩中文字幕电影| 蝌蚪窝在线视频免费观看| 51妺妺嘿嘿午夜成人A片| 亚洲综合视频网| 无码视频播放| 俺来也在线视频| 99热碰碰热| 一级黄视频| 秒播福利| 黄色直播在线观看| 欧美日韩在线观看一区二区三区| 成人一区二区三区四区| 97精品人妻一区二区| 久久黄色视频| 欧一美一色一伦一A片| 亚洲日韩国产AV| 18岁毛片| 国产精品成人在线视频| 精品一区二区三区三区| 九九精品视频在线观看| 免费看V片| 在线中文字幕视频| 日本有码在线| 欧美A级视频在线观看| 国产高清无码一区二区| 久久人视频| 一级A片免费看| 黄色视频在线网站| 大香蕉伊人手机在线| 97人妻精品一区二区三区| 国产九九热视频| 性做久久久久久| 大香蕉婷婷五月天| 色色射| AAA黄片| 国产欧美在线视频| 岛国免费视频| 伊人免费| 无码看片| 婷婷五月天电影网| 欧美亚洲综合手机在线| 婷婷五月天成人电影| 黄色中文字幕| 国产成人一级| 天天干天天撸| 国产口爆在线观看| 亚洲一区图片| 国产精品国产精品国产| 人人操久久| 一区视频免费观看| 日韩一区二区AV| 国产午夜视频在线观看| 亚洲性爱视频| 中文字幕在线无码视频| 日比视频| 免费a片视频| 色色影音先锋| 丁香激情综合| 日韩在线观看| 成人看片黄a免费看视频| 自拍偷拍亚洲无码| 作爱免费视频| 青草免费视频| 日韩黄色电影网址| 91网站在线播放| 日本精品在线观看视频| 蜜桃一区二区视频在线观看| 国产操逼视频网站| 中文字幕一区二区三区在线观看| 亚洲AV中文在线| 久久精品99久久久久久久久| 北条麻妃无码视频在线观看 | 成人天堂| 日本一区二区三区免费观看| 特级西西西88大胆无码| 亚洲一级二级片| 成人电影一区二区三区| 夜夜狠狠躁日日躁| 日韩无码五月天| 国产乱码精品一品二品| 国产女人18毛片水真多18| 亚洲成人黄色电影| 超碰99在线观看| 无码V| 中文字幕第72页| 日韩午夜无码| 精品免费囯产| 中文无码av| 黄页网站免费观看| 精品国产偷拍| 国产性猛交╳XXX乱大交| 手机在线一区| 一区二区三区四区不卡| www.四虎成人网站| 亚洲性爱av| 四季AV一区二区夜夜嗨| 先锋影音资源AV| 欧美18成人| 人人草在线| XXXX操| 爽好紧别夹喷水欧美| 成人在线精品| 欧美成人网站在线| 亚洲视频网站在线观看| 91麻豆精品在线观看| 午夜福利日本| 俺也去com| 欧美人妻视频在线| 丁香六月| 中文字幕av久久久久久欧洲尺码| 亚洲无aV在线中文字幕| 国产91在线观看| 国产精品AV在线观看| 俺去俺来也在线www色情网| 亚洲天堂无码av| 婷婷五月天成人社区| 91黄色在线视频| 美日韩在线观看| A片网| 国产一区二区三区四区视频| 乱子伦国产精品| AV一级片| 麻豆成人无码精品视频| 国产三级在线观看视频| 精品久久一区二区| 五月天婷婷激情视频| 日韩一级免费在线观看| 99精品视频免费在线观看| 亚洲精品无码更新| 玖玖国产精品| 麻豆911精一区二区| 天天操大香蕉| av色图| 欧美日韩亚洲一区二区三区| 国产国产国产在线无码视频| 五月天婷婷AV| 欧美aaa| 日韩美在线视频| 欧美精品成人免费片| 日韩中文字幕无码| 国产AV三级片| 青青草免费公开视频| www.97色色| 操B无码| 久久亚洲天堂| 国产高清无码在线| 亚洲第二页| 黄色成人在线| 91九九| 在线观看中文字幕av| 亚洲第一视频| 最新中文字幕| 丁香色综合人妻| 淫荡五月天视频导航| 大橡胶伊人网| 996热久久| 一级操逼大片| 狼友免费视频| 日韩成人无码电影网站| wwwwww黄| 亚洲无码性爱视频| 青草福利在线| 一二区无码| 99这里只有精品视频| 波多野结衣AV无码| 欧美成人图片视频在线| 日日夜夜爱| 国产精品一区一区三区| 人人综合网| 亚洲人成人无码一区二区三区| 高清无码黄| 无码色色| 欧美性爱中文字幕| 日韩一级视频| 精品孕妇一级A片免费看| 四川性BBB搡BBB爽爽爽小说| 黄色一级片免费| 久操视频免费在线观看| 精品免费国产一区二区三区四区 | 美日韩视频欧美一区二区视频| 婷婷激情中文字幕| 99r6热只有精品免费观看| 免费黄色a片| 偷拍-91爱爱| 国产免费a| 亚洲成人av在线| 辽宁模特张雪馨视频最新| 日韩不卡高清在线观看视频 | 北条麻妃在线不卡| 亚洲天堂视频在线| 国产精品成人电影| 国产真人一级a爱做片| 一卡二卡在线视频| 亚洲中文字幕色| 成人亚洲A片V一区二区三区蜜月| 超碰精品在线| 91福利网| 岛国免费视频| 成人小说视频| 国产黄色免费观看| 麻豆操逼| 麻豆黄网| 国产h在线播放| 狠狠躁18三区二区一区免费人 | 高潮流水视频| 97人人爽人人爽人人人| 国产一区二区三区18| 蜜桃无码一区| 国产高清中文字幕| 夜夜高潮夜夜爽| 超碰中文字幕| 亚洲无码A区| 久久精品免费电影| 婷婷五月天综合| 91成人影片| 一道本无码免费视频| 日皮网站在线观看| 超碰A片| 亚洲熟女一区| 蜜桃秘一二三区最新| 91丨PORN首页| 精品美女视频在线观看免费软件 | 两根茎一起进去好爽A片在线观看| 国产av综合网| 国产精品乱子伦视频一区二区| 涩涩99| 大鸡吧大香蕉| WWW久久久| 亚洲一区在线播放| 日逼99| 日本黄色影院在线| 91女人18片女毛片60分钟| 免费看黄片网站| 日韩无码你懂的| 亚洲中文综合| 日韩黄色一级片| 久久久久中文字幕| 亚洲高清成人动漫| 一级片免费观看| 18精品爽视频| 91精品电影| 欧美日韩三级| 免费的黄色视频在线观看| 大香蕉伊人网站| 国内无码| 亚洲成年网| 操逼电影| 国产一级影院| 久久精品在线播放| 大香蕉伊人综合| 日韩无修正| 亚洲免费观看高清完整版在线| 大香蕉精品在线| 久草视频在线免费播放| 国产精品无码天天爽视频| 久久国产av| 大香蕉伊人导航| 一级一A片一a免费看| 伊人成人在线| 亚洲精品影视| 特级西西444www高清| 久久久精品无码| 午夜亚洲精品| 午夜一区| 黄色网址在线观看视频| 欧美三级美国一级| 成人av黄色三级片在线观看| 91丨国产丨白浆| 国产av一级| 无码人妻精品一区二区蜜桃网站 | 亚洲欧美日韩在线| 91亚洲国产成人久久精品网站| 超碰在线观看91| 亚洲AV秘无码一区在线| 国产成人在线免费| 亚洲色逼图片| 男人天堂久久| 伊人网站| 永久精品| 日韩人妻丰满无码区A片| 亚洲男同Gay一区二区| 天堂免费视频| 激情自拍偷拍| 黃色一级A片一級片| 亚洲videos| 婷婷六月激情| 拍拍拍免费视频| 亚洲色欲色欲www在线成人网| 成人午夜小电影| 四虎精品成人无码A片| 91亚洲在线观看| 三级亚洲| 成人五月天黄色电影| 日本一区二区视频| 久热精品在线| 国产AⅤ爽aV久久久久成人| 在线不卡无码| 淫揉BBB揉揉揉BBBBB| 国产熟女自拍| 一级免费黄色片| 国产在线97| 国产三级网站| 黄色在线视频观看| 国产中文字幕在线观看| 国产精品成人免费视频| 亚洲人妻AV| 又黄又爽视频| 日韩在线中文字幕| 国产操b视频| 日韩av中文在线| 国产精品日韩无码| 亚洲av二区| 超碰精品在线| 日本黄色直播| 天堂a中文在线| WWW色色| 中文字幕乱码视频32| 97人妻在线视频| 中文字幕婷婷五月天| 精品AV| AV色天堂| 精品國產一區二區三區久久蜜月 | 农村A片婬片AAA毛片| 就要干就要操| 国产在线欧美在线| 国产综合在线播放| 日逼高清视频| 日韩一区二区无码| 久久精品久久久久久久| 777免费观看成人电影视频| 日韩一级无码特黄AAA片| 四虎午夜福利| www.大鸡巴| 日韩黄| 国产久久视频在线观看| 日本精品二区| 人人操人人摸人人爽| 久草视频99| 北条麻妃无码精品AV| 午夜专区| 九九草影院| 丰滿人妻一区二区三区| 亚洲成人一二三区| 日日干视频| 无码成人午夜在线影院| 国产一级二级三级久久久| 日韩一级无码| 午夜久久久久久久久久久久91| 九九热99视频| 91人妻视频| 人人摸人人色| 欧美女人日逼视频| 人人爱人人妻人人操| 荫蒂添出高潮A片视频| 神马午夜精品91| 欧美男人天堂网| 91豆花视频| 日韩爱爱免费视频| 成人黄网站在线观看| 亚洲在线中文字幕| 亚洲综合久| 日韩小视频+国产| 午色婷婷国产无码| 成人在线小视频| 99天天操| 操逼爆奶网站| 欧美日韩在线观看视频| 亚洲无码精品在线观看| 无码五区| 亚洲1234区| 91人妻人人操| 中文字幕AⅤ在线| 人人看AV| 2024av在线| 老熟女露脸25分钟91秒| 在线观看视频免费无码免费视频 | 日韩插插| 91在线精品无码秘入口苹果| 国产麻豆三级片| 黄色国产网站| 免费观看日韩无码视频| 欧美日韩三级片| 国产欧美综合一区二区三区| 尤物在线免费视频| 不卡无码中文字幕| 影音先锋中文字幕资源| 大香蕉视频网| 色婷婷综合激情| 中文字幕在线日本| 无码国产精品一区二区性色AV| 美妇肥臀一区二区三区-久久99精品国 | 男人天堂v| 国产艹| 人人色在线观看| 国产精品一区二区AV日韩在线| 亚洲AV无码一区二区三竹菊| 亚洲有码在线观看| 无码秘人妻一区二区三-百度| 国产免费一级特黄A片| 成年人黄色视频免费观看| 国产中文字幕AV在线播放| 无码h| 久草超碰在线| 国产AV小电影| 国产三级视频在线| 91无码人妻东京热精品一区| 午夜午夜福利理论片在线播放| a片在线免费观看| 亚洲女人被黑人巨大进入| 日韩熟女视频| 91人妻无码精品一区二区三区 | 国产三级国产三级国产| 日韩AV一区二区三区四区| 色综合色综合色综合| 色婷婷欧美在线播放内射| 老司机狠狠干| 精品成人| 99操逼| 久草视频福利| 伊人天天操| 五月婷婷综合在线| 午夜天堂精品久久久| 少妇搡BBBB搡BBB搡毛片少妇| 国产成人三级在线播放| 韩日高清无码| 一本一道vs波多野结衣| 日韩性爱视频| 日韩毛片视频| 国产综合视频| 波多野结衣AV在线播放| 97色在线| 午夜成人无码| 一本一道伊人99久久综| 久久午夜一级A片| 亚洲精品国偷拍自产在线观看蜜桃| 亚洲一区翔田千里无码| 99热精品久久| 黄色插逼视频| 成人A电影| 日韩精品一区二区三区四区| 江苏妇搡BBBB搡BBBB-百度| 99精品视频免费观看| 大香蕉综合在线| 久久精品国产视频| 黄色录像一级片| 麻豆专区| www.91麻豆| 国模精品无码一区二区免费蜜桃| 色婷婷亚洲综合| 无码群交| 操啊操| 中文字幕亚洲在线观看| 一级A爱爱| 婷婷丁香一区二区三区| 激情视频免费在线观看| 欧美黄色三级视频| 91av久久| 黄色视频在线观看免费网站 | 91精品久久久久| 欧美久久久| 国产一级黄色电影| 蜜柚av| 强奸校花到高潮| 欧美性爱操逼视频| 在线观看免费黄| 成人色色视频| 亚洲av黄| 69成人精品|