gridsome
Version:
A JAMstack framework for building blazing fast websites with Vue.js
43 lines (35 loc) • 978 B
JavaScript
const isSupported = (
'document' in global &&
(() => {
const link = document.createElement('link')
return link.relList && link.relList.supports && link.relList.supports('prefetch')
})()
)
export default function prefetch (url) {
return new Promise((resolve, reject) => {
if (isSupported) {
const link = document.createElement('link')
const removeLink = () => document.head.removeChild(link)
link.onerror = err => {
removeLink()
reject(err)
}
link.onload = () => {
removeLink()
resolve()
}
link.setAttribute('rel', 'prefetch')
link.setAttribute('href', url)
document.head.appendChild(link)
} else {
const req = new XMLHttpRequest()
req.open('GET', url, true)
req.withCredentials = true
req.onload = () => {
if (req.status === 200) resolve()
else reject(new Error(req.statusText))
}
req.send(null)
}
})
}