Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 36b025c

Browse files
[feat]add pwa(离线模式)支持
1 parent a4d4c13 commit 36b025c

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

‎index.html‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
<!-- docsify-edit-on-github -->
1818
<script src="//unpkg.com/docsify-edit-on-github/index.js"></script>
1919
<script>
20+
// 离线支持
21+
if (typeof navigator.serviceWorker !== 'undefined') {
22+
navigator.serviceWorker.register('sw.js')
23+
}
24+
2025
window.$docsify = {
2126
name: 'JavaGuide',
2227
repo: 'https://github.com/Snailclimb/JavaGuide',
@@ -50,6 +55,8 @@
5055
-->
5156
<!-- 复制到剪贴板 -->
5257
<script src="//unpkg.com/docsify-copy-code"></script>
58+
<!-- 图片缩放 -->
59+
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.js"></script>
5360
</body>
5461

5562
</html>

‎sw.js‎

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/* ===========================================================
2+
* docsify sw.js
3+
* ===========================================================
4+
* Copyright 2016 @huxpro
5+
* Licensed under Apache 2.0
6+
* Register service worker.
7+
* ========================================================== */
8+
9+
const RUNTIME = 'docsify'
10+
const HOSTNAME_WHITELIST = [
11+
self.location.hostname,
12+
'fonts.gstatic.com',
13+
'fonts.googleapis.com',
14+
'unpkg.com'
15+
]
16+
17+
// The Util Function to hack URLs of intercepted requests
18+
const getFixedUrl = (req) => {
19+
var now = Date.now()
20+
var url = new URL(req.url)
21+
22+
// 1. fixed http URL
23+
// Just keep syncing with location.protocol
24+
// fetch(httpURL) belongs to active mixed content.
25+
// And fetch(httpRequest) is not supported yet.
26+
url.protocol = self.location.protocol
27+
28+
// 2. add query for caching-busting.
29+
// Github Pages served with Cache-Control: max-age=600
30+
// max-age on mutable content is error-prone, with SW life of bugs can even extend.
31+
// Until cache mode of Fetch API landed, we have to workaround cache-busting with query string.
32+
// Cache-Control-Bug: https://bugs.chromium.org/p/chromium/issues/detail?id=453190
33+
if (url.hostname === self.location.hostname) {
34+
url.search += (url.search ? '&' : '?') + 'cache-bust=' + now
35+
}
36+
return url.href
37+
}
38+
39+
/**
40+
* @Lifecycle Activate
41+
* New one activated when old isnt being used.
42+
*
43+
* waitUntil(): activating ====> activated
44+
*/
45+
self.addEventListener('activate', event => {
46+
event.waitUntil(self.clients.claim())
47+
})
48+
49+
/**
50+
* @Functional Fetch
51+
* All network requests are being intercepted here.
52+
*
53+
* void respondWith(Promise<Response> r)
54+
*/
55+
self.addEventListener('fetch', event => {
56+
// Skip some of cross-origin requests, like those for Google Analytics.
57+
if (HOSTNAME_WHITELIST.indexOf(new URL(event.request.url).hostname) > -1) {
58+
// Stale-while-revalidate
59+
// similar to HTTP's stale-while-revalidate: https://www.mnot.net/blog/2007/12/12/stale
60+
// Upgrade from Jake's to Surma's: https://gist.github.com/surma/eb441223daaedf880801ad80006389f1
61+
const cached = caches.match(event.request)
62+
const fixedUrl = getFixedUrl(event.request)
63+
const fetched = fetch(fixedUrl, { cache: 'no-store' })
64+
const fetchedCopy = fetched.then(resp => resp.clone())
65+
66+
// Call respondWith() with whatever we get first.
67+
// If the fetch fails (e.g disconnected), wait for the cache.
68+
// If there’s nothing in cache, wait for the fetch.
69+
// If neither yields a response, return offline pages.
70+
event.respondWith(
71+
Promise.race([fetched.catch(_ => cached), cached])
72+
.then(resp => resp || fetched)
73+
.catch(_ => { /* eat any errors */ })
74+
)
75+
76+
// Update the cache with the version we fetched (only for ok status)
77+
event.waitUntil(
78+
Promise.all([fetchedCopy, caches.open(RUNTIME)])
79+
.then(([response, cache]) => response.ok && cache.put(event.request, response))
80+
.catch(_ => { /* eat any errors */ })
81+
)
82+
}
83+
})

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /