日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

js文件里获取路由 vue_【源码拾遗】从vue-router看前端路由的两种实现

發布時間:2025/3/15 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js文件里获取路由 vue_【源码拾遗】从vue-router看前端路由的两种实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文由淺入深觀摩vue-router源碼是如何通過hash與History interface兩種方式實現前端路由,介紹了相關原理,并對比了兩種方式的優缺點與注意事項。最后分析了如何實現可以直接從文件系統加載而不借助后端服務器的Vue單頁應用。

隨著前端應用的業務功能越來越復雜、用戶對于使用體驗的要求越來越高,單頁應用(SPA)成為前端應用的主流形式。大型單頁應用最顯著特點之一就是采用前端路由系統,通過改變URL,在不重新請求頁面的情況下,更新頁面視圖。

“更新視圖但不重新請求頁面”是前端路由原理的核心之一,目前在瀏覽器環境中這一功能的實現主要有兩種方式:利用URL中的hash(“#”)

利用History interface在 HTML5中新增的方法

vue-router是Vue.js框架的路由插件,下面我們從它的源碼入手,邊看代碼邊看原理,由淺入深觀摩vue-router是如何通過這兩種方式實現前端路由的。

模式參數

在vue-router中是通過mode這一參數控制路由的實現模式的:

const router = new VueRouter({

mode: 'history',

routes: [...]

})

創建VueRouter的實例對象時,mode以構造函數參數的形式傳入。帶著問題閱讀源碼,我們就可以從VueRouter類的定義入手。一般插件對外暴露的類都是定義在源碼src根目錄下的index.js文件中,打開該文件,可以看到VueRouter類的定義,摘錄與mode參數有關的部分如下:

export default class VueRouter {

mode: string; // 傳入的字符串參數,指示history類別

history: HashHistory | HTML5History | AbstractHistory; // 實際起作用的對象屬性,必須是以上三個類的枚舉

fallback: boolean; // 如瀏覽器不支持,'history'模式需回滾為'hash'模式

constructor (options: RouterOptions = {}) {

let mode = options.mode || 'hash' // 默認為'hash'模式

this.fallback = mode === 'history' && !supportsPushState // 通過supportsPushState判斷瀏覽器是否支持'history'模式

if (this.fallback) {

mode = 'hash'

}

if (!inBrowser) {

mode = 'abstract' // 不在瀏覽器環境下運行需強制為'abstract'模式

}

this.mode = mode

// 根據mode確定history實際的類并實例化

switch (mode) {

case 'history':

this.history = new HTML5History(this, options.base)

break

case 'hash':

this.history = new HashHistory(this, options.base, this.fallback)

break

case 'abstract':

this.history = new AbstractHistory(this, options.base)

break

default:

if (process.env.NODE_ENV !== 'production') {

assert(false, `invalid mode: ${mode}`)

}

}

}

init (app: any /* Vue component instance */) {

const history = this.history

// 根據history的類別執行相應的初始化操作和監聽

if (history instanceof HTML5History) {

history.transitionTo(history.getCurrentLocation())

} else if (history instanceof HashHistory) {

const setupHashListener = () => {

history.setupListeners()

}

history.transitionTo(

history.getCurrentLocation(),

setupHashListener,

setupHashListener

)

}

history.listen(route => {

this.apps.forEach((app) => {

app._route = route

})

})

}

// VueRouter類暴露的以下方法實際是調用具體history對象的方法

push (location: RawLocation, onComplete?: Function, onAbort?: Function) {

this.history.push(location, onComplete, onAbort)

}

replace (location: RawLocation, onComplete?: Function, onAbort?: Function) {

this.history.replace(location, onComplete, onAbort)

}

}

可以看出:

作為參數傳入的字符串屬性mode只是一個標記,用來指示實際起作用的對象屬性history的實現類,兩者對應關系如下:modehistory'history'HTML5History'hash'HashHistory'abstract'AbstractHistory

在初始化對應的history之前,會對mode做一些校驗:若瀏覽器不支持HTML5History方式(通過supportsPushState變量判斷),則mode強制設為'hash';若不是在瀏覽器環境下運行,則mode強制設為'abstract'

VueRouter類中的onReady(), push()等方法只是一個代理,實際是調用的具體history對象的對應方法,在init()方法中初始化時,也是根據history對象具體的類別執行不同操作

在瀏覽器環境下的兩種方式,分別就是在HTML5History,HashHistory兩個類中實現的。他們都定義在src/history文件夾下,繼承自同目錄下base.js文件中定義的History類。History中定義的是公用和基礎的方法,直接看會一頭霧水,我們先從HTML5History,HashHistory兩個類中看著親切的push(), replace()方法的說起。

HashHistory

看源碼前先回顧一下原理:

hash(“#”)符號的本來作用是加在URL中指示網頁中的位置:http://www.example.com/index.html#print

#符號本身以及它后面的字符稱之為hash,可通過window.location.hash屬性讀取。它具有如下特點:hash雖然出現在URL中,但不會被包括在HTTP請求中。它是用來指導瀏覽器動作的,對服務器端完全無用,因此,改變hash不會重新加載頁面

可以為hash的改變添加監聽事件:

window.addEventListener("hashchange", funcRef, false)

每一次改變hash(window.location.hash),都會在瀏覽器的訪問歷史中增加一個記錄

利用hash的以上特點,就可以來實現前端路由“更新視圖但不重新請求頁面”的功能了。

HashHistory.push()

我們來看HashHistory中的push()方法:

push (location: RawLocation, onComplete?: Function, onAbort?: Function) {

this.transitionTo(location, route => {

pushHash(route.fullPath)

onComplete && onComplete(route)

}, onAbort)

}

function pushHash (path) {

window.location.hash = path

}

transitionTo()方法是父類中定義的是用來處理路由變化中的基礎邏輯的,push()方法最主要的是對window的hash進行了直接賦值:

window.location.hash = route.fullPath

hash的改變會自動添加到瀏覽器的訪問歷史記錄中。

那么視圖的更新是怎么實現的呢,我們來看父類History中transitionTo()方法的這么一段:

transitionTo (location: RawLocation, onComplete?: Function, onAbort?: Function) {

const route = this.router.match(location, this.current)

this.confirmTransition(route, () => {

this.updateRoute(route)

...

})

}

updateRoute (route: Route) {

this.cb && this.cb(route)

}

listen (cb: Function) {

this.cb = cb

}

可以看到,當路由變化時,調用了History中的this.cb方法,而this.cb方法是通過History.listen(cb)進行設置的。回到VueRouter類定義中,找到了在init()方法中對其進行了設置:

init (app: any /* Vue component instance */) {

this.apps.push(app)

history.listen(route => {

this.apps.forEach((app) => {

app._route = route

})

})

}

根據注釋,app為Vue組件實例,但我們知道Vue作為漸進式的前端框架,本身的組件定義中應該是沒有有關路由內置屬性_route,如果組件中要有這個屬性,應該是在插件加載的地方,即VueRouter的install()方法中混合入Vue對象的,查看install.js源碼,有如下一段:

export function install (Vue) {

Vue.mixin({

beforeCreate () {

if (isDef(this.$options.router)) {

this._router = this.$options.router

this._router.init(this)

Vue.util.defineReactive(this, '_route', this._router.history.current)

}

registerInstance(this, this)

},

})

}

通過Vue.mixin()方法,全局注冊一個混合,影響注冊之后所有創建的每個 Vue 實例,該混合在beforeCreate鉤子中通過Vue.util.defineReactive()定義了響應式的_route屬性。所謂響應式屬性,即當_route值改變時,會自動調用Vue實例的render()方法,更新視圖。

總結一下,從設置路由改變到視圖更新的流程如下:

$router.push() --> HashHistory.push() --> History.transitionTo() --> History.updateRoute() --> {app._route = route} --> vm.render()

HashHistory.replace()

replace()方法與push()方法不同之處在于,它并不是將新路由添加到瀏覽器訪問歷史的棧頂,而是替換掉當前的路由:

replace (location: RawLocation, onComplete?: Function, onAbort?: Function) {

this.transitionTo(location, route => {

replaceHash(route.fullPath)

onComplete && onComplete(route)

}, onAbort)

}

function replaceHash (path) {

const i = window.location.href.indexOf('#')

window.location.replace(

window.location.href.slice(0, i >= 0 ? i : 0) + '#' + path

)

}

可以看出,它與push()的實現結構上基本相似,不同點在于它不是直接對window.location.hash進行賦值,而是調用window.location.replace方法將路由進行替換。

監聽地址欄

以上討論的VueRouter.push()和VueRouter.replace()是可以在vue組件的邏輯代碼中直接調用的,除此之外在瀏覽器中,用戶還可以直接在瀏覽器地址欄中輸入改變路由,因此VueRouter還需要能監聽瀏覽器地址欄中路由的變化,并具有與通過代碼調用相同的響應行為。在HashHistory中這一功能通過setupListeners實現:

setupListeners () {

window.addEventListener('hashchange', () => {

if (!ensureSlash()) {

return

}

this.transitionTo(getHash(), route => {

replaceHash(route.fullPath)

})

})

}

該方法設置監聽了瀏覽器事件hashchange,調用的函數為replaceHash,即在瀏覽器地址欄中直接輸入路由相當于代碼調用了replace()方法

HTML5History

History interface是瀏覽器歷史記錄棧提供的接口,通過back(), forward(), go()等方法,我們可以讀取瀏覽器歷史記錄棧的信息,進行各種跳轉操作。

從HTML5開始,History interface提供了兩個新的方法:pushState(), replaceState()使得我們可以對瀏覽器歷史記錄棧進行修改:

window.history.pushState(stateObject, title, URL)

window.history.replaceState(stateObject, title, URL)stateObject: 當瀏覽器跳轉到新的狀態時,將觸發popState事件,該事件將攜帶這個stateObject參數的副本

title: 所添加記錄的標題

URL: 所添加記錄的URL

這兩個方法有個共同的特點:當調用他們修改瀏覽器歷史記錄棧后,雖然當前URL改變了,但瀏覽器不會立即發送請求該URL(the browser won't attempt to load this URL after a call to pushState()),這就為單頁應用前端路由“更新視圖但不重新請求頁面”提供了基礎。

我們來看vue-router中的源碼:

push (location: RawLocation, onComplete?: Function, onAbort?: Function) {

const { current: fromRoute } = this

this.transitionTo(location, route => {

pushState(cleanPath(this.base + route.fullPath))

handleScroll(this.router, route, fromRoute, false)

onComplete && onComplete(route)

}, onAbort)

}

replace (location: RawLocation, onComplete?: Function, onAbort?: Function) {

const { current: fromRoute } = this

this.transitionTo(location, route => {

replaceState(cleanPath(this.base + route.fullPath))

handleScroll(this.router, route, fromRoute, false)

onComplete && onComplete(route)

}, onAbort)

}

// src/util/push-state.js

export function pushState (url?: string, replace?: boolean) {

saveScrollPosition()

// try...catch the pushState call to get around Safari

// DOM Exception 18 where it limits to 100 pushState calls

const history = window.history

try {

if (replace) {

history.replaceState({ key: _key }, '', url)

} else {

_key = genKey()

history.pushState({ key: _key }, '', url)

}

} catch (e) {

window.location[replace ? 'replace' : 'assign'](url)

}

}

export function replaceState (url?: string) {

pushState(url, true)

}

代碼結構以及更新視圖的邏輯與hash模式基本類似,只不過將對window.location.hash直接進行賦值window.location.replace()改為了調用history.pushState()和history.replaceState()方法。

在HTML5History中添加對修改瀏覽器地址欄URL的監聽是直接在構造函數中執行的:

constructor (router: Router, base: ?string) {

window.addEventListener('popstate', e => {

const current = this.current

this.transitionTo(getLocation(this.base), route => {

if (expectScroll) {

handleScroll(router, route, current, true)

}

})

})

}

當然了HTML5History用到了HTML5的新特特性,是需要特定瀏覽器版本的支持的,前文已經知道,瀏覽器是否支持是通過變量supportsPushState來檢查的:

// src/util/push-state.js

export const supportsPushState = inBrowser && (function () {

const ua = window.navigator.userAgent

if (

(ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&

ua.indexOf('Mobile Safari') !== -1 &&

ua.indexOf('Chrome') === -1 &&

ua.indexOf('Windows Phone') === -1

) {

return false

}

return window.history && 'pushState' in window.history

})()

以上就是hash模式與history模式源碼的導讀,這兩種模式都是通過瀏覽器接口實現的,除此之外vue-router還為非瀏覽器環境準備了一個abstract模式,其原理為用一個數組stack模擬出瀏覽器歷史記錄棧的功能。當然,以上只是一些核心邏輯,為保證系統的魯棒性源碼中還有大量的輔助邏輯,也很值得學習。此外在vue-router中還有路由匹配、router-view視圖組件等重要部分,關于整體源碼的閱讀推薦滴滴前端的這篇文章

兩種模式比較

在一般的需求場景中,hash模式與history模式是差不多的,但幾乎所有的文章都推薦使用history模式,理由竟然是:"#" 符號太丑...0_0 "如果不想要很丑的 hash,我們可以用路由的 history 模式 ——官方文檔

當然,嚴謹的我們肯定不應該用顏值評價技術的好壞。根據MDN的介紹,調用history.pushState()相比于直接修改hash主要有以下優勢:pushState設置的新URL可以是與當前URL同源的任意URL;而hash只可修改#后面的部分,故只可設置與當前同文檔的URL

pushState設置的新URL可以與當前URL一模一樣,這樣也會把記錄添加到棧中;而hash設置的新值必須與原來不一樣才會觸發記錄添加到棧中

pushState通過stateObject可以添加任意類型的數據到記錄中;而hash只可添加短字符串

pushState可額外設置title屬性供后續使用

history模式的一個問題

我們知道對于單頁應用來講,理想的使用場景是僅在進入應用時加載index.html,后續在的網絡操作通過Ajax完成,不會根據URL重新請求頁面,但是難免遇到特殊情況,比如用戶直接在地址欄中輸入并回車,瀏覽器重啟重新加載應用等。

hash模式僅改變hash部分的內容,而hash部分是不會包含在HTTP請求中的:

http://oursite.com/#/user/id // 如重新請求只會發送http://oursite.com/

故在hash模式下遇到根據URL請求頁面的情況不會有問題。

而history模式則會將URL修改得就和正常請求后端的URL一樣

http://oursite.com/user/id

在此情況下重新向后端發送請求,如后端沒有配置對應/user/id的路由處理,則會返回404錯誤。官方推薦的解決辦法是在服務端增加一個覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態資源,則應該返回同一個 index.html 頁面,這個頁面就是你 app 依賴的頁面。同時這么做以后,服務器就不再返回 404 錯誤頁面,因為對于所有路徑都會返回 index.html 文件。為了避免這種情況,在 Vue 應用里面覆蓋所有的路由情況,然后在給出一個 404 頁面?;蛘?#xff0c;如果是用 Node.js 作后臺,可以使用服務端的路由來匹配 URL,當沒有匹配到路由的時候返回 404,從而實現 fallback。

直接加載應用文件Tip: built files are meant to be served over an HTTP server.

Opening index.html over file:// won't work.

Vue項目通過vue-cli的webpack打包完成后,命令行會有這么一段提示。通常情況,無論是開發還是線上,前端項目都是通過服務器訪問,不存在 "Opening index.html over file://" ,但程序員都知道,需求和場景永遠是千奇百怪的,只有你想不到的,沒有產品經理想不到的。

本文寫作的初衷就是遇到了這樣一個問題:需要快速開發一個移動端的展示項目,決定采用WebView加載Vue單頁應用的形式,但沒有后端服務器提供,所以所有資源需從本地文件系統加載:

// AndroidAppWrapper

public class MainActivity extends AppCompatActivity {

private WebView webView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

webView = new WebView(this);

webView.getSettings().setJavaScriptEnabled(true);

webView.loadUrl("file:///android_asset/index.html");

setContentView(webView);

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {

webView.goBack();

return true;

}

return false;

}

}

此情此景看來是必須 "Opening index.html over file://" 了,為此,我首先要進行了一些設置在項目config.js文件中將assetsPublicPath字段的值改為相對路徑 './'

調整生成的static文件夾中圖片等靜態資源的位置與代碼中的引用地址一致

這是比較明顯的需要改動之處,但改完后依舊無法順利加載,經過反復排查發現,項目在開發時,router設置為了history模式(為了美觀...0_0"),當改為hash模式后就可正常加載了。

為什么會出現這種情況呢?我分析原因可能如下:

當從文件系統中直接加載index.html時,URL為:

file:///android_asset/index.html

而首頁視圖需匹配的路徑為path: '/' :

export default new Router({

mode: 'history',

routes: [

{

path: '/',

name: 'index',

component: IndexView

}

]

})

我們先來看history模式,在HTML5History中:

ensureURL (push?: boolean) {

if (getLocation(this.base) !== this.current.fullPath) {

const current = cleanPath(this.base + this.current.fullPath)

push ? pushState(current) : replaceState(current)

}

}

export function getLocation (base: string): string {

let path = window.location.pathname

if (base && path.indexOf(base) === 0) {

path = path.slice(base.length)

}

return (path || '/') + window.location.search + window.location.hash

}

邏輯只會確保存在URL,path是通過剪切的方式直接從window.location.pathname獲取到的,它的結尾是index.html,因此匹配不到 '/' ,故 "Opening index.html over file:// won't work" 。

再看hash模式,在HashHistory中:

export class HashHistory extends History {

constructor (router: Router, base: ?string, fallback: boolean) {

...

ensureSlash()

}

// this is delayed until the app mounts

// to avoid the hashchange listener being fired too early

setupListeners () {

window.addEventListener('hashchange', () => {

if (!ensureSlash()) {

return

}

...

})

}

getCurrentLocation () {

return getHash()

}

}

function ensureSlash (): boolean {

const path = getHash()

if (path.charAt(0) === '/') {

return true

}

replaceHash('/' + path)

return false

}

export function getHash (): string {

const href = window.location.href

const index = href.indexOf('#')

return index === -1 ? '' : href.slice(index + 1)

}

我們看到在代碼邏輯中,多次出現一個函數ensureSlash(),當#符號后緊跟著的是'/',則返回true,否則強行插入這個'/',故我們可以看到,即使是從文件系統打開index.html,URL依舊會變為以下形式:

file:///C:/Users/dist/index.html#/

getHash()方法返回的path為 '/' ,可與首頁視圖的路由匹配。

故要想從文件系統直接加載Vue單頁應用而不借助后端服務器,除了打包后的一些路徑設置外,還需確保vue-router使用的是hash模式。

總結

以上是生活随笔為你收集整理的js文件里获取路由 vue_【源码拾遗】从vue-router看前端路由的两种实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

激情av网址 | 成人综合婷婷国产精品久久免费 | 一区二区三区高清在线观看 | 日韩一区二区免费播放 | 久草资源在线 | 国产精品一区二区白浆 | 免费在线观看黄网站 | 中文字幕免费中文 | 欧美成人久久 | 久久视频在线视频 | 人人澡人人爽欧一区 | 日韩精品一区二区不卡 | www.夜夜夜 | 日韩特级片 | 亚洲最新精品 | 国产精品免费视频一区二区 | 麻豆免费视频 | 国产一级片久久 | 国产精品久久久久一区二区 | 久久久网址| 日日爽日日操 | 国产一区黄色 | 久久国产欧美日韩精品 | 在线免费观看欧美日韩 | 国产一级在线观看视频 | 日本久久久影视 | 久草在线观看 | 亚洲一区二区三区毛片 | 99久热精品 | 日韩精品无码一区二区三区 | 国产精品欧美久久久久无广告 | 国产最顶级的黄色片在线免费观看 | 日韩精品欧美一区 | 国产精品成人aaaaa网站 | 亚洲欧洲精品一区二区精品久久久 | 久草视频免费播放 | 99视频偷窥在线精品国自产拍 | 色婷婷国产在线 | 精品人妖videos欧美人妖 | 国产91免费看 | 国产白浆在线观看 | 99久久精品一区二区成人 | 乱子伦av| av一区在线 | 久久久精品国产免费观看同学 | 国产97视频在线 | 久久精品最新 | 97超视频免费观看 | 在线观看视频免费大全 | 在线91网| 毛片久久久 | 国产精品18久久久久久vr | 亚洲天堂自拍视频 | 国产一区国产二区在线观看 | 综合国产视频 | 亚洲无人区小视频 | 国产婷婷精品 | 九九久久国产 | 久久久久久久久久久久久影院 | 欧美怡红院| 中文字幕刺激在线 | 午夜丰满寂寞少妇精品 | 成人久久免费 | 天天插日日射 | 国产精品白丝jk白祙 | 国产一级视频免费看 | 欧美a级片免费看 | 96在线 | 最近中文字幕高清字幕免费mv | 蜜臀久久99精品久久久久久网站 | 91亚洲精品久久久蜜桃借种 | 欧美久久久久久久久久 | www.五月天色 | 美女久久视频 | 日韩欧美在线国产 | 午夜av免费 | 欧美日韩一区二区三区在线观看视频 | 国产一区二区影院 | 91激情| 一级精品视频在线观看宜春院 | 麻豆久久一区二区 | 91正在播放| 九七人人干| 久久久免费视频播放 | 久久精品毛片基地 | 欧美色婷婷 | av大片网址 | 国产免费亚洲 | 国产在线专区 | 成人黄大片视频在线观看 | 永久免费看av | 久久久免费精品国产一区二区 | 正在播放 久久 | 日本精品一区二区在线观看 | 97在线观视频免费观看 | 免费在线国产黄色 | 久久激情婷婷 | 韩国中文三级 | av资源在线观看 | 麻豆视频免费在线观看 | 久久99最新地址 | 久久亚洲私人国产精品va | 久久99操| a级国产乱理伦片在线播放 久久久久国产精品一区 | 亚洲免费国产 | 1区2区视频| 国产视频在线观看一区二区 | 久久久人人爽 | 午夜电影一区 | 国产淫a| 69久久久久久久 | 伊人天天狠天天添日日拍 | 国产精品久久婷婷六月丁香 | 成人精品999 | 99九九免费视频 | 亚洲激情视频在线 | 日日爽视频 | 黄色网址中文字幕 | 97精品伊人| 久久免费a | 亚洲午夜精品一区二区三区电影院 | 国产亚洲欧美精品久久久久久 | 久久久久国 | 热久久免费国产视频 | 欧洲精品视频一区二区 | 午夜视频在线瓜伦 | 久99久中文字幕在线 | 日韩综合视频在线观看 | 九九九九九国产 | 99精品影视 | 色永久免费视频 | 日韩啪啪小视频 | 91桃色在线观看视频 | 91精品视频播放 | 91丨九色丨勾搭 | 国产色视频网站 | 亚洲韩国一区二区三区 | 最近日本mv字幕免费观看 | 91成人精品一区在线播放69 | 久久爱影视i | 天天草视频| 日韩美女av在线 | 免费观看mv大片高清 | 韩国三级一区 | 天天躁天天躁天天躁婷 | 日韩中文字幕第一页 | 日韩一区在线免费观看 | 亚洲视频第一页 | 成人欧美在线 | 日韩精品第1页 | 成人精品视频久久久久 | 日免费视频 | 97视频在线看 | 嫩草av影院| 亚洲人av免费网站 | 天天操天天射天天舔 | 岛国av在线不卡 | 菠萝菠萝在线精品视频 | av综合av | 人人澡人摸人人添学生av | 免费视频 三区 | 国产精品二区在线 | 欧美国产日韩在线视频 | 成人免费视频播放 | 99精品免费 | 中文字幕视频一区 | 91成人小视频 | 国产小视频在线观看 | 青青网视频 | 国产精品白浆视频 | 天天操天天干天天干 | 中文字幕在线观看第三页 | 91亚洲永久精品 | 91视频免费看片 | 日操干| 国产在线国偷精品产拍免费yy | 日本特黄特色aaa大片免费 | 国产精品女人网站 | 久久狠狠一本精品综合网 | 国产精品自产拍在线观看蜜 | 日韩在线视频一区二区三区 | av线上免费看| 亚洲一区二区精品视频 | 国产专区一 | 亚洲va天堂va欧美ⅴa在线 | 人人超碰在线 | 狠狠色丁婷婷日日 | 亚州欧美视频 | 黄色1级毛片 | 精品国产一区二区三区四区在线观看 | 国产区精品 | 蜜臀av在线一区二区三区 | 麻豆久久久久久久 | 夜夜骑天天操 | 日韩欧美在线视频一区二区三区 | 亚洲精品欧美精品 | 日韩精品一区二区三区中文字幕 | 久久精品xxx| 久久爽久久爽久久av东京爽 | 91av资源在线 | 最近中文字幕完整视频高清1 | 天天综合视频在线观看 | 青青河边草观看完整版高清 | 久久婷婷色综合 | 成人av观看| 中文字幕在线播放视频 | 日本精品在线 | 国产一级黄色av | 丁香视频免费观看 | 麻豆久久 | 国产91精品一区二区麻豆亚洲 | 99综合影院在线 | 字幕网在线观看 | 亚洲精品自在在线观看 | 一区二区不卡视频在线观看 | 日韩1级片 | 国产黄色免费看 | 免费日韩av片 | 国产理论免费 | 亚洲电影影音先锋 | 久久精品123| 成人免费观看视频网站 | 五月丁色| 日本二区三区在线 | 国产精品久久久久久久久搜平片 | 午夜视频在线观看一区二区三区 | 色鬼综合网 | 亚洲成人软件 | 国产成人精品久久亚洲高清不卡 | 亚洲成人精品久久久 | 色资源网在线观看 | 特级西西444www高清大视频 | 久久综合久久久久88 | 国产精品国产三级在线专区 | 欧美日韩一区二区在线观看 | 久一久久| 免费在线观看亚洲视频 | 久久久久成人精品亚洲国产 | 免费又黄又爽视频 | 免费视频三区 | 亚洲高清视频在线 | 久久久国产一区二区 | 成人a级黄色片 | 一区二区三区日韩精品 | 久久久久久久久久久成人 | 在线播放视频一区 | 九九热免费精品视频 | 久久久久久久久毛片精品 | 国产一区二区不卡在线 | 久久夜靖品 | 国产一区免费在线观看 | 在线国产激情视频 | 人成午夜视频 | 99在线精品免费视频九九视 | 五月天久久久久久 | 久久久久久高潮国产精品视 | 国产乱对白刺激视频不卡 | 亚洲高清精品在线 | 亚洲黄色免费观看 | 国产手机在线观看 | 黄色精品一区 | 亚洲精品乱码久久久久久写真 | 精品国产成人在线影院 | 亚洲成 人精品 | 精品亚洲视频在线 | 操高跟美女 | 婷婷成人亚洲综合国产xv88 | 亚洲成a人片77777潘金莲 | 欧美久久久久久久久久久久 | 久草视频免费在线观看 | 九九精品视频在线看 | 91完整视频 | 日本在线中文在线 | 黄色三级在线看 | 中文在线www | 中文字幕乱码日本亚洲一区二区 | 亚洲视频999 | 欧美日韩网址 | 国产不卡视频在线 | 视频在线99 | av千婊在线免费观看 | 久久久久久国产精品999 | 色天天综合久久久久综合片 | 狠狠久久婷婷 | 国产成人免费在线 | 国产不卡免费视频 | 日韩国产精品久久 | 91九色蝌蚪国产 | 精品国偷自产国产一区 | 亚洲久草在线视频 | av动图| bbbbb女女女女女bbbbb国产 | 韩国一区视频 | 国产视频在线播放 | 日韩在线首页 | 欧美日韩精品在线观看视频 | 日韩三级.com | 国产999精品 | 亚洲欧洲精品一区 | 色狠狠狠| 精品国产一区二区三区久久久 | 国产精品亚洲片在线播放 | 国产a精品 | 人人爽人人爽人人片 | 国产精品一区二区久久久 | 久久精品国产免费看久久精品 | 在线日韩视频 | 91热视频在线观看 | 久草视频在线免费看 | 国产在线观看h | 在线免费黄 | 国产精品福利一区 | 久久伊人婷婷 | 亚洲一区美女视频在线观看免费 | 欧美色插 | 午夜视频在线网站 | 免费日韩一区二区 | 国产美女无遮挡永久免费 | 97精品视频在线 | 91丨九色丨高潮丰满 | 免费在线中文字幕 | 韩国中文三级 | 亚洲一区二区精品3399 | 国内精品亚洲 | 午夜精品久久久久久久99婷婷 | 美女免费视频观看网站 | 久久在草 | 亚洲视频456 | 国产精品久久久久久久久久久久午夜 | 三级黄在线 | 色婷婷视频在线观看 | 97在线免费 | 麻豆视频免费在线 | 久草在线视频免赞 | 亚洲色图 校园春色 | 日韩美女黄色片 | 亚洲黄色在线观看 | 最新国产中文字幕 | 久久天天拍 | 91视频免费国产 | 在线视频麻豆 | 免费精品人在线二线三线 | 欧美日韩国产免费视频 | 亚洲国产资源 | 成人观看 | 免费观看完整版无人区 | 黄色软件大全网站 | 日本中文字幕在线播放 | 国产一级二级三级在线观看 | 欧美污在线观看 | 中文字幕一区二区在线观看 | 九月婷婷人人澡人人添人人爽 | 成年人视频在线免费观看 | 草久中文字幕 | www.国产毛片 | 在线观看av免费 | 久久精品久久久久 | 欧美成年人在线观看 | av电影中文 | 91高清视频在线 | 韩国三级av在线 | 久久国产午夜精品理论片最新版本 | 日本中文乱码卡一卡二新区 | 97精品在线观看 | 国产一区二区在线影院 | 国产在线更新 | 国产精品21区 | 人人玩人人添人人澡超碰 | 天天爽夜夜爽人人爽一区二区 | 欧美男同网站 | 狠狠狠色丁香综合久久天下网 | 91精品啪在线观看国产81旧版 | 国产美腿白丝袜足在线av | 中文字幕免费高 | 黄色资源在线观看 | av在线播放观看 | 黄色h在线观看 | 天天色棕合合合合合合 | 国产不卡高清 | 丁香色综合 | 在线看日韩| 亚洲 综合 国产 精品 | 日本激情视频中文字幕 | 欧洲精品久久久久毛片完整版 | 亚洲91视频 | 成年人国产精品 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 国产成人av网站 | 欧美色综合天天久久综合精品 | 免费99视频 | 色综合久久久久久久 | 成人在线超碰 | 黄色三级在线 | 视频精品一区二区三区 | 免费看毛片网站 | 亚洲国产成人av网 | 五月天天av| 亚洲手机天堂 | 久久久综合香蕉尹人综合网 | 操高跟美女 | 国产精品久久久久国产精品日日 | 91视频 - v11av| 久久久久久视频 | 国产在线观看免 | 国产午夜精品一区 | 国产黄av | 狠狠狠狠狠狠狠干 | 色狠狠狠 | 国产一区二区三区免费视频 | 亚洲天天综合 | 亚洲精品中文字幕视频 | 天天色天天操天天爽 | 五月激情天 | 国产自产在线视频 | 久久狠狠一本精品综合网 | 91av99| 91精品福利在线 | 久久精品一区二区三区国产主播 | 国产精品普通话 | 色网站黄| 日韩免费电影网 | 夜夜高潮夜夜爽国产伦精品 | 成人av.com | wwwwww色| 2019中文字幕第一页 | 色噜噜日韩精品一区二区三区视频 | 久久精品123| 91精品婷婷国产综合久久蝌蚪 | 欧美日韩中字 | 在线观看国产91 | 91视频这里只有精品 | 中文字幕精品在线 | 美女国产免费 | 日日操日日操 | 中文字幕精品一区二区精品 | 欧美国产大片 | 黄色三级在线看 | 久久精品免费播放 | 成人a毛片| 国产精品第2页 | 一区二区三区四区五区在线 | 国内一区二区视频 | www色片| 欧美日韩在线免费观看视频 | 日韩精品视频在线观看网址 | 欧美极品一区二区三区 | 国产精品国产精品 | 美女视频黄是免费的 | 91精品在线观看视频 | 久久免费国产电影 | 97在线观看视频国产 | 成人黄色在线 | 俺要去色综合狠狠 | 久久精品这里热有精品 | 亚洲 综合 国产 精品 | 日韩,精品电影 | 在线观看av网 | 特级西西444www大精品视频免费看 | 天天操天天色综合 | 日韩大片免费观看 | 国产精品久久久区三区天天噜 | 免费视频久久久久 | 久久99久久精品国产 | 91麻豆精品国产91久久久更新时间 | 伊人国产视频 | 高潮久久久久久 | 少妇资源站 | 江苏妇搡bbbb搡bbbb | 成人黄色电影在线观看 | 国产成人一区在线 | 国产一区二区不卡在线 | 亚洲理论在线观看电影 | 天天射综合 | 久草com| 蜜桃视频色 | 精品久久久久久久久久久久久久久久久久 | 国产精品免费一区二区三区 | 欧美国产精品久久久久久免费 | 免费下载高清毛片 | 在线天堂中文在线资源网 | 最新一区二区三区 | 少妇bbw搡bbbb搡bbbb | 少妇bbbb揉bbbb日本 | 一本大道久久精品懂色aⅴ 五月婷社区 | 欧美 日韩 国产 成人 在线 | 天天操狠狠操网站 | 中文字幕日韩免费视频 | 久久九九久久精品 | 99精品在线免费视频 | 韩国一区二区三区视频 | 伊人手机在线 | 999电影免费在线观看 | 欧美激情视频一区二区三区免费 | 国产99久久久国产精品免费看 | 婷婷中文在线 | 国产高清黄色 | 精品国产一区二区三区在线观看 | 日批在线观看 | 国产精品综合久久久久久 | av短片在线观看 | 久久久国产成人 | 国产a视频免费观看 | 69成人在线 | 日韩美在线观看 | 美女视频a美女大全免费下载蜜臀 | 亚洲精品免费观看视频 | 国产高清不卡一区二区三区 | 麻豆传媒视频在线 | 免费麻豆 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 日韩在线中文字幕 | 天天爽天天搞 | 成人av免费在线 | 中文高清av | av网址最新 | 国产精品第二十页 | www.少妇| 一区二区三区免费在线观看 | 911在线| 色综合久久综合中文综合网 | 91完整视频 | 国产精品嫩草在线 | 国产网站在线免费观看 | 成人在线视频在线观看 | 狠狠操.com | 狠狠综合| 免费www视频 | 欧美一级免费黄色片 | 日日日日| 波多野结衣小视频 | 中文字幕 婷婷 | 国产精品久久精品 | 乱男乱女www7788 | 成人国产精品av | 探花视频在线观看 | 国产日韩欧美自拍 | 人人插人人爱 | 国产精品一区二区三区电影 | 国产一区二区在线播放 | 国产高清视频在线 | 国产香蕉久久精品综合网 | 黄色软件网站在线观看 | 91av在线播放 | av丝袜在线| av黄色一级片 | 人人狠狠综合久久亚洲婷 | 黄色av网站在线观看免费 | 亚洲va欧洲va国产va不卡 | 91看片在线播放 | 麻豆系列在线观看 | 国产黄色成人 | 久久不卡国产精品一区二区 | 国产成人久久av免费高清密臂 | 五月婷婷在线视频观看 | 一区二区三区免费在线观看视频 | 国产精品久久久久久久久久三级 | 成人免费观看视频大全 | av软件在线观看 | 亚洲精品女人久久久 | www.神马久久 | 欧美成年网站 | 看黄色91 | 日韩中字在线观看 | 国产精品久久久久久999 | 欧美地下肉体性派对 | 国产 日韩 欧美 中文 在线播放 | 97**国产露脸精品国产 | 久久精品一二三 | 丁香花中文字幕 | 国产精品亚洲视频 | 中文在线a∨在线 | 99久久久久久 | 久久久一本精品99久久精品 | 男女激情片在线观看 | 欧美夫妻性生活电影 | 热久久免费视频精品 | av免费电影网站 | 香蕉久久国产 | 日日夜日日干 | 热re99久久精品国产99热 | 国产精品婷婷午夜在线观看 | 久久久久激情视频 | 精品91| 久久国产精品网站 | 综合婷婷丁香 | 欧美成人在线网站 | 日韩av一区二区三区在线观看 | 美女网站黄免费 | 国内成人精品2018免费看 | 亚洲干| 综合五月 | 成人在线视频论坛 | 丁香色综合| 久久久www成人免费精品 | 黄色软件视频网站 | 国产成人61精品免费看片 | 99人久久精品视频最新地址 | 久久人人爽人人爽人人 | 欧美性极品xxxx做受 | 国际精品久久 | 久久久99国产精品免费 | 在线观看视频国产一区 | 亚州av免费 | 色婷婷激情四射 | 国产一级二级在线 | 欧美日韩中文在线 | 91亚洲视频在线观看 | 久久人人精品 | 中国一级片在线 | 久久视频免费看 | 五月婷婷激情六月 | 97在线视频免费 | 在线观看国产福利片 | 91网站在线视频 | 男女视频久久久 | 成人性生交视频 | 中文乱幕日产无线码1区 | 中文字幕高清免费日韩视频在线 | 91视频这里只有精品 | 日韩大片在线免费观看 | 日韩电影一区二区三区 | 最近的中文字幕大全免费版 | 久久久久久美女 | 99亚洲精品视频 | 成人免费视频网站在线观看 | 亚洲欧洲av在线 | 亚洲国产色一区 | 国产午夜精品福利视频 | 天天做日日爱夜夜爽 | 欧美激情综合五月色丁香 | 国产精品久久影院 | 久草9视频 | 成年人免费电影在线观看 | 精品国产乱码 | 日韩女同av | 黄网站污 | 高清视频一区二区三区 | 2024国产精品视频 | 超碰免费观看 | 日韩欧美在线综合网 | 成人午夜剧场在线观看 | 九七在线视频 | 丝袜美腿在线视频 | 一区二区三区av在线 | 日本久久成人 | 手机看国产毛片 | 黄色精品久久 | 亚洲天堂自拍视频 | 2018亚洲男人天堂 | 日韩精品欧美专区 | 国产又粗又猛又黄又爽视频 | 六月丁香伊人 | 亚洲综合在线视频 | 亚洲爱爱视频 | 超碰av在线 | 午夜影视剧场 | 欧美日本一区 | 亚洲一级理论片 | 精品国产免费人成在线观看 | 色婷婷国产在线 | 久久艹99 | 色网免费观看 | 久久综合给合久久狠狠色 | 亚洲欧洲国产视频 | 久久综合九色综合久久久精品综合 | 99视频+国产日韩欧美 | 人成在线免费视频 | 9999毛片 | 天天干com| 国产福利在线免费 | 久久99精品国产99久久 | 超碰在线网 | 一本一本久久a久久精品综合妖精 | 日韩电影在线一区 | 成人免费视频网 | 亚洲另类视频 | 91免费视频黄 | av久久在线 | 色.com| 久久一本综合 | 久久精品在线视频 | 天天操天天色天天射 | 亚洲资源视频 | 激情图片区 | 久久电影中文字幕视频 | 国产99一区视频免费 | 午夜资源站 | 成年人在线电影 | 在线免费观看视频a | 国产精品av在线免费观看 | 亚洲精品视频免费看 | 精品国模一区二区三区 | 成人av中文字幕在线观看 | 特级西西www44高清大胆图片 | 久久黄网站 | 视频国产 | 日韩av中文在线观看 | 麻豆一区在线观看 | 99爱国产精品 | 国产手机在线观看视频 | 中文字幕在线观看完整版电影 | 日韩在线视频看看 | 麻豆视频在线看 | 热精品| 久久激情五月丁香伊人 | 成人小电影在线看 | 少妇性色午夜淫片aaaze | 欧美韩日视频 | 视频一区二区在线观看 | 97操操 | 国产在线观看a | 在线观看中文字幕一区 | 在线高清一区 | 91久久丝袜国产露脸动漫 | 免费视频你懂得 | 美女在线免费视频 | 色狠狠操 | 美女免费网站 | 日韩久久久久 | 亚洲精品乱码久久久久久9色 | 中文字幕在线免费看线人 | 亚洲黄色在线观看 | 久久dvd | 国产美腿白丝袜足在线av | 国产在线观看xxx | 国产高清 不卡 | 91成年人在线观看 | 成人资源网| 97视频资源 | www.91国产| 色噜噜在线观看视频 | 天天插天天操天天干 | 国偷自产视频一区二区久 | 四虎在线视频免费观看 | 伊人五月天综合 | 日日夜操| 东方av在| 日韩高清免费在线 | 国产精品久久久久久久久久久久午 | 国产精品久久久久久久电影 | 亚洲综合色视频 | 人人玩人人添人人 | 国产视频一区在线免费观看 | 久久综合五月婷婷 | 免费网址你懂的 | 99精品在线视频播放 | 黄色1级大片 | 久久理论电影网 | 国产精品九九九九九九 | 精品国产一区二区三区久久久蜜臀 | 色婷婷激情网 | 国产精品每日更新 | 亚洲成人频道 | 91精品视频在线 | 久久爱综合 | 国产亚洲精品久久久久久移动网络 | 久久看视频 | 欧美一区免费在线观看 | 亚洲伦理电影在线 | 天天操偷偷干 | 99爱视频 | 日韩欧美视频免费看 | 欧美小视频在线观看 | 国产涩涩网站 | 久久久精品电影 | 日日干激情五月 | 久久网页 | 免费成人结看片 | 亚洲精品在线免费看 | 亚洲精品国偷自产在线99热 | 黄网站色视频 | 国产精品久久久久久欧美 | 国产高清视频免费最新在线 | 久久99精品久久久久久 | 欧美日韩视频精品 | 日韩av快播电影网 | 日韩av美女 | 久久999精品 | 亚洲精品美女在线观看 | 国产精品日韩在线 | 天天激情天天干 | 婷婷色狠狠 | 久久99精品久久久久婷婷 | 国产精品扒开做爽爽的视频 | 日韩三区在线观看 | 最新的av网站 | 国产精品视频免费看 | 91久久一区二区 | 黄色tv视频| 成人毛片在线观看视频 | 91精品国产92久久久久 | 色婷婷免费视频 | 欧美一级电影 | 免费av片在线 | 91在线在线观看 | 欧美日韩中文字幕综合视频 | 少妇性色午夜淫片aaaze | 欧美人体xx| 波多野结衣久久精品 | 国产a视频免费观看 | 日韩v欧美v日本v亚洲v国产v | 黄色片免费在线 | av在线免费观看网站 | 99精品99| 在线不卡中文字幕播放 | 久久久久国产a免费观看rela | 欧美另类人妖 | 久久久免费毛片 | 亚洲理论在线观看 | 91精品国产一区二区三区 | 91欧美在线 | 亚洲精品女人 | av免费播放 | 婷婷四房综合激情五月 | 丁香五月亚洲综合在线 | 亚洲激情视频 | 国产色拍拍拍拍在线精品 | 豆豆色资源网xfplay | 欧美a免费 | 91豆花在线观看 | 成人网看片| 黄色三几片 | 免费在线黄色av | 国产呻吟在线 | 成人在线观看资源 | 丁香婷婷色月天 | 99久久毛片 | 亚洲精品免费在线 | 亚洲伊人第一页 | 91精品国自产在线观看 | 国产性天天综合网 | 亚洲视频免费在线观看 | 午夜久久| 亚洲高清精品在线 | 99久久精品国产一区 | 高清不卡一区二区在线 | 天天射色综合 | 久久久精品在线观看 | 久久久麻豆 | 亚洲精品乱码久久久久久9色 | jizz欧美性9| 天天做日日做天天爽视频免费 | 日韩免费一区 | 制服丝袜天堂 | 日批在线看| 久草视频一区 | 久久精品网 | 91成人精品国产刺激国语对白 | 福利av在线 | 国产成人精品一区一区一区 | 天天天干天天天操 | 国内久久精品 | 欧美大荫蒂xxx | 91精品一区二区三区蜜臀 | 日韩欧美精品在线观看 | 天天色天天上天天操 | 亚洲视频第一页 | www国产在线 | 麻豆视频在线观看免费 | 97在线观看视频国产 | 国产成人精品日本亚洲999 | 午夜精品视频一区二区三区在线看 | 精品在线一区二区 | 成人久久18免费网站 | 国产三级视频在线 | 亚洲精品综合在线 | 久久精品久久国产 | 超碰在线1 | 在线观看理论 | 天天撸夜夜操 | 国产日韩欧美在线影视 | av+在线播放在线播放 | 天天操天天操天天操天天 | 国产伦精品一区二区三区照片91 | 国产成人精品久久二区二区 | 久久人人爽人人片 | 五月激情丁香婷婷 | 国产精品黄色 | 国产剧情av在线播放 | 国产精品21区 | 免费高清在线视频一区· | 精品国产诱惑 | 在线91播放| 激情综合五月天 | 国产小视频在线观看免费 | 色中色综合 | 日本aaa在线观看 | 中文字幕在线成人 | 亚洲最新av网址 | jizz欧美性9| 97国产电影 | 成 人 黄 色 视频播放1 | 99热精品国产一区二区在线观看 | 麻豆91精品视频 | 午夜久久精品 | 国产精品毛片一区视频 | 久久视频免费看 | 操操操av | 国产黄色a | 人人爱人人舔 | 一区二区三区日韩视频在线观看 | 深爱激情站 | 91丝袜美腿 | 激情xxxx | 国产精品观看在线亚洲人成网 | 黄www在线观看 | 久久久高清免费视频 | 久久高清| 日本护士三级少妇三级999 | 91精品国产92久久久久 | 亚洲欧洲精品一区 | 国产又粗又猛又色又黄视频 | 免费在线播放视频 | 91av视频在线免费观看 | 国产一区二区三区 在线 | 久久精品国产免费看久久精品 | 美州a亚洲一视本频v色道 | 久久中文精品视频 | 亚洲婷婷丁香 | 欧美最爽乱淫视频播放 | 国产91区| 久久久www成人免费毛片麻豆 | 男女视频国产 | 国产成人久久 | 亚洲视频在线观看网站 | 在线 你懂 | 精品1区二区 | 手机在线看片日韩 | 久久免费精彩视频 | 一区二区久久久久 | 亚洲全部视频 | 91成熟丰满女人少妇 | 欧美日韩视频在线观看一区二区 | 国产一卡在线 | 中文字幕在线观看不卡 | 国产在线播放一区二区三区 | 97在线播放视频 | 在线成人一区二区 | 中文字幕免费高清在线 | 91av免费看| 久久高清国产 | www.91国产| 黄色a一级片 | 亚洲三级性片 | 在线观看av免费观看 | 日韩精品欧美专区 | 91网在线看| 日日操网站 | 久久精品高清视频 | aav在线| 99久久精品国产网站 | 中文字幕日本在线观看 | 久久久精品小视频 | 不卡av电影在线 | 久久免费国产精品1 | 91麻豆产精品久久久久久 | avlulu久久精品 | 成人视屏免费看 | 亚洲动漫在线观看 | 97av.com| 天天草视频 | 欧美黄色高清 | 中文字幕一区二区在线播放 | 97色国产 | 狠狠伊人| 日韩三级在线观看 | 嫩嫩影院理论片 | 日韩精品一区二区免费视频 | 日日躁你夜夜躁你av蜜 | 激情影院在线观看 | 欧美成人黄 | 九九免费精品视频在线观看 | 欧美一级片免费在线观看 | 国产高清黄 | 97人人人人 | 一区二区三区电影大全 | 视频在线观看99 | 日韩免费观看高清 | 啪啪免费观看网站 | 大片网站久久 | 狠狠干2018| 久久久精品免费看 | 五月天天色 | 久久久久综合精品福利啪啪 | 亚洲国产视频直播 | 69国产盗摄一区二区三区五区 | 日本三级不卡视频 | 国产女v资源在线观看 | 国产黄色电影 | 日韩免费大片 | 91精品国产乱码在线观看 | 伊人狠狠色 | 99久高清在线观看视频99精品热在线观看视频 | av线上看 | 久草在线免费资源 | 毛片激情永久免费 | 亚洲精品午夜久久久久久久 | 成人亚洲精品久久久久 |