|
@@ -1,3 +1,66 @@
|
|
|
+/**
|
|
|
+ * 初始化sw脚本
|
|
|
+ */
|
|
|
+function initServiceWorkerScript (callback) {
|
|
|
+ function removeServiceWorker () {
|
|
|
+ if ("serviceWorker" in navigator) {
|
|
|
+ navigator.serviceWorker
|
|
|
+ .register("/sw.js")
|
|
|
+ .then(function (registration) {
|
|
|
+ // registration worked
|
|
|
+ console.log("Registration succeeded.");
|
|
|
+ registration.unregister().then(function (boolean) {
|
|
|
+ // if boolean = true, unregister is successful
|
|
|
+ console.log('b', boolean)
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(function (error) {
|
|
|
+ // registration failed
|
|
|
+ console.log("Registration failed with " + error);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function addServiceWorker (callback) {
|
|
|
+ // 注册 Service Worker
|
|
|
+ if ('serviceWorker' in navigator) {
|
|
|
+ navigator.serviceWorker.register('/sw.js')
|
|
|
+ .then((res) => {
|
|
|
+ console.log('SW Init')
|
|
|
+ try {
|
|
|
+ res.active.postMessage({
|
|
|
+ type: 'update-sw-cache'
|
|
|
+ })
|
|
|
+ } catch (err) {
|
|
|
+ console.log('SW Not Active', err)
|
|
|
+ }
|
|
|
+ typeof callback === "function" && callback(true)
|
|
|
+ })
|
|
|
+ .catch(err => {
|
|
|
+ console.log('SW failed', err)
|
|
|
+ typeof callback === "function" && callback(false)
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ typeof callback === "function" && callback(true)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ navigator.serviceWorker.addEventListener('controllerchange', () => {
|
|
|
+ // 当service worker管控页面时触发
|
|
|
+ alert("检测到资源修复脚本更新,请刷新页面");
|
|
|
+ })
|
|
|
+
|
|
|
+ const runSw = localStorage.getItem('run-cdn') === 'true'
|
|
|
+ console.log('是否启用拦截', runSw)
|
|
|
+
|
|
|
+ if (runSw) {
|
|
|
+ addServiceWorker(callback)
|
|
|
+ } else {
|
|
|
+ removeServiceWorker()
|
|
|
+ }
|
|
|
+}
|
|
|
+initServiceWorkerScript()
|
|
|
+
|
|
|
// 异常资源数组
|
|
|
const failedResources = [];
|
|
|
|
|
@@ -6,7 +69,7 @@ const domains = [];
|
|
|
|
|
|
// 备用域名映射
|
|
|
const BackCDNs = {
|
|
|
- 'jybx3-webtest.jydev.jianyu360.com': 'jybx-webtest.jydev.jianyu360.com',
|
|
|
+ 'cdn-jybx-webtest.jydev.jianyu360.com': 'jybx-webtest.jydev.jianyu360.com',
|
|
|
'cdn-ali222.jianyu360.com': 'cdn-ali2.jianyu360.com',
|
|
|
'cdn-ali222.jianyu360.cn': 'cdn-ali2.jianyu360.com',
|
|
|
'cdn-ali.jianyu360.cn': 'cdn-ali.jianyu360.com',
|
|
@@ -48,7 +111,7 @@ window.addEventListener('error', (e) => {
|
|
|
|
|
|
// 插入弹窗 Node
|
|
|
let initCDNDialog = false
|
|
|
-function addCDNDialogNode () {
|
|
|
+function addCDNDialogNode (callback) {
|
|
|
if (initCDNDialog) {
|
|
|
return
|
|
|
}
|
|
@@ -100,16 +163,18 @@ function addCDNDialogNode () {
|
|
|
`
|
|
|
document.head.appendChild(cdnStyle)
|
|
|
|
|
|
+ window._CDN_ON_CALLBACK_ = callback
|
|
|
+
|
|
|
const cdnNode = document.createElement('div')
|
|
|
cdnNode.innerHTML = `
|
|
|
- <div class="cdn-tip--dialog" id="cdn-tip">
|
|
|
+ <div class="cdn-tip--dialog show" id="cdn-tip">
|
|
|
<p>
|
|
|
检测到当前页面故障,是否尝试进行修复?
|
|
|
<br>
|
|
|
您也可自行联系您的网络管理员获得支持
|
|
|
</p>
|
|
|
<div>
|
|
|
- <button class="tip-button--submit" onclick="location.reload()">尝试修复</button>
|
|
|
+ <button class="tip-button--submit" onclick="window._CDN_ON_CALLBACK_(true)">尝试修复</button>
|
|
|
<button class="tip-button--cancel" onclick="location.href = 'https://www.jianyu360.cn/assets-inspect.html'">联系网络管理员</button>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -122,76 +187,32 @@ window.addEventListener('load', () => {
|
|
|
console.log('load Failed resources:', failedResources)
|
|
|
console.log('load Extracted domains:', domains)
|
|
|
|
|
|
- // 存储
|
|
|
- caches.open('CDN_INSPECT_2SW').then(cache => {
|
|
|
- cache.put('/CDN-DATA', new Response(JSON.stringify({
|
|
|
- FailedCDNs: domains,
|
|
|
- BackCDNs: BackCDNs
|
|
|
- })))
|
|
|
- })
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- function removeServiceWorker () {
|
|
|
- if ("serviceWorker" in navigator) {
|
|
|
- navigator.serviceWorker
|
|
|
- .register("brand/js/sw.js")
|
|
|
- .then(function (registration) {
|
|
|
- // registration worked
|
|
|
- console.log("Registration succeeded.");
|
|
|
- registration.unregister().then(function (boolean) {
|
|
|
- // if boolean = true, unregister is successful
|
|
|
- console.log('b', boolean)
|
|
|
- });
|
|
|
- })
|
|
|
- .catch(function (error) {
|
|
|
- // registration failed
|
|
|
- console.log("Registration failed with " + error);
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- function addServiceWorker () {
|
|
|
- // 注册 Service Worker
|
|
|
- if ('serviceWorker' in navigator) {
|
|
|
- const cdnTipNode = document.querySelector('#cdn-tip')
|
|
|
- navigator.serviceWorker.register('/brand/js/sw.js')
|
|
|
- .then(() => {
|
|
|
- // 通知用户
|
|
|
- cdnTipNode.classList.add('show')
|
|
|
- })
|
|
|
- .catch(err => {
|
|
|
- // 通知用户
|
|
|
- cdnTipNode.classList.add('show')
|
|
|
- cdnTipNode.classList.add('action-tip')
|
|
|
-
|
|
|
- console.log('SW failed', err)
|
|
|
- });
|
|
|
-
|
|
|
- navigator.serviceWorker.addEventListener('controllerchange', () => {
|
|
|
- // 当service worker管控页面时触发
|
|
|
- alert("检测到SW更新,请刷新页面");
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- const stopSw = localStorage.getItem('stop-cdn') === 'true'
|
|
|
-
|
|
|
- console.log('是否禁用拦截', stopSw)
|
|
|
-
|
|
|
- if (stopSw) {
|
|
|
- removeServiceWorker()
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
const hasBackCDN = Object.keys(BackCDNs).some(v => domains.includes(v))
|
|
|
-
|
|
|
console.log('异常域名是否包含备用', hasBackCDN)
|
|
|
|
|
|
- if (!stopSw && domains.length && hasBackCDN) {
|
|
|
- addCDNDialogNode()
|
|
|
- addServiceWorker()
|
|
|
+ const canNext = domains.length && hasBackCDN
|
|
|
+ console.log('是否存在可修复的异常域名', canNext)
|
|
|
+
|
|
|
+ if (canNext) {
|
|
|
+ // 存储
|
|
|
+ caches.open('CDN_INSPECT_2SW').then(cache => {
|
|
|
+ cache.put('/CDN-DATA', new Response(JSON.stringify({
|
|
|
+ FailedCDNs: domains,
|
|
|
+ BackCDNs: BackCDNs
|
|
|
+ })))
|
|
|
+ })
|
|
|
+
|
|
|
+ addCDNDialogNode(function () {
|
|
|
+ localStorage.setItem('run-cdn', true)
|
|
|
+ initServiceWorkerScript(function (state) {
|
|
|
+ if (state) {
|
|
|
+ location.reload()
|
|
|
+ } else {
|
|
|
+ alert('修复脚本加载失败')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
}
|
|
|
-});
|
|
|
+})
|
|
|
|
|
|
|