generated from dellevin/template
1
This commit is contained in:
46
node_modules/vue-router/src/util/push-state.js
generated
vendored
Normal file
46
node_modules/vue-router/src/util/push-state.js
generated
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
/* @flow */
|
||||
|
||||
import { inBrowser } from './dom'
|
||||
import { saveScrollPosition } from './scroll'
|
||||
import { genStateKey, setStateKey, getStateKey } from './state-key'
|
||||
import { extend } from './misc'
|
||||
|
||||
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 && typeof window.history.pushState === 'function'
|
||||
})()
|
||||
|
||||
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) {
|
||||
// preserve existing history state as it could be overriden by the user
|
||||
const stateCopy = extend({}, history.state)
|
||||
stateCopy.key = getStateKey()
|
||||
history.replaceState(stateCopy, '', url)
|
||||
} else {
|
||||
history.pushState({ key: setStateKey(genStateKey()) }, '', url)
|
||||
}
|
||||
} catch (e) {
|
||||
window.location[replace ? 'replace' : 'assign'](url)
|
||||
}
|
||||
}
|
||||
|
||||
export function replaceState (url?: string) {
|
||||
pushState(url, true)
|
||||
}
|
||||
Reference in New Issue
Block a user