update.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. let lastSrc // 上次获取的script地址
  2. const scriptReg = /<script.*src=["'](?<src>[^"']+)/gm
  3. /**
  4. * 获取页面中的script
  5. *
  6. */
  7. async function extractNewScripts (url) {
  8. const html = await fetch('/?_timestamp' + Date.now()).then((resp) => resp.text())
  9. scriptReg.lastIndex = 0
  10. const scripts = []
  11. let match
  12. while ((match = scriptReg.exec(html))) {
  13. scripts.push(match.groups.src)
  14. }
  15. return scripts
  16. }
  17. /**
  18. * 检测是否需要更新
  19. */
  20. async function needUpdate () {
  21. const scripts = await extractNewScripts()
  22. if (!lastSrc) {
  23. lastSrc = scripts
  24. return false
  25. }
  26. let result = false
  27. if (lastSrc.length !== scripts.length) {
  28. result = true
  29. }
  30. for (let i = 0; i < lastSrc.length; i++) {
  31. if (scripts[i] !== lastSrc[i]) {
  32. result = true
  33. break
  34. }
  35. }
  36. lastSrc = scripts
  37. return result
  38. }
  39. const DURATION = 3000
  40. export default function autoRefresh () {
  41. setTimeout(async () => {
  42. const willUpdate = await needUpdate()
  43. if (willUpdate) {
  44. const result = confirm('检测到有版本更新,是否刷新页面?')
  45. if (result) {
  46. location.reload()
  47. }
  48. }
  49. autoRefresh()
  50. }, DURATION)
  51. }