GreatAuk / plugin-web-update-notification

Detect webpage updates and notify user to reload. support Vite, Umijs, and Webpack.
MIT License
490 stars 42 forks source link

点击刷新之后404 #17

Closed xyyaxyy closed 1 year ago

xyyaxyy commented 1 year ago

webpack构建的,项目不是部署在根目录下的,点击刷新之后404,该怎么配置

GreatAuk commented 1 year ago

插件能正常提示更新,但点击刷新后页面 404?

xyyaxyy commented 1 year ago

是的,项目是部署在 /admin/ 文件夹下面的。刷新之前页面路径 www.test.com/admin/#/home,刷新之后 www.test.com/admin/?time=1680578947180#/home。?time=1680578947180按理说应该追加到最后的

GreatAuk commented 1 year ago
function reloadPageWithoutCache() {
  const url = new URL(window.location.href)
  url.searchParams.set('__time__', Date.now().toString())
  window.location.replace(url.href)
}

你打开项目,在控制台运行下这个方法,看下会不会 404,我在一个用 hash 路由的项目运行这个方法,没有问题。 还有这个 404 页面是项目中自定义的 404, 还是说 nginx 返回的 404

xyyaxyy commented 1 year ago

nginx 返回的404,searchParams设置参数到 hash前面去导致的。 window.pluginWebUpdateNotice_.onClickRefresh 点击刷新的方法,我该在放在什么地方重置

GreatAuk commented 1 year ago

nginx 返回的404,searchParams设置参数到 hash前面去导致的。 window.pluginWebUpdateNotice_.onClickRefresh 点击刷新的方法,我该在放在什么地方重置

放在入口文件就行,index.js main.js 之类的

window.pluginWebUpdateNotice_.onClickRefresh = () => window.location.reload()
GreatAuk commented 1 year ago

你什么浏览器,什么版本。我本地真没复现。 www.test.com/admin/?time=1680578947180#/home 这个 url 感觉怪怪的,但完全是没问题的。

const url = new URL('http://www.test.com/admin/?__time__=1680578947180#/home')
console.log(url.hash)  // #/home
console.log(url.search)  // ?__time__=1680578947180
xyyaxyy commented 1 year ago

谷歌浏览器最新版的, url.searchParams.set() 在hash模式下设置的参数就会是这种。

GreatAuk commented 1 year ago

你那个项目地址能发出来吗?我看下,不需要提供账号密码

xyyaxyy commented 1 year ago

我测试了另外一个项目,可以正常刷新,应该是nginx配置问题。不过刷新后的url也是这种,https://demo.antsxdp.com/admin/

GreatAuk commented 1 year ago

admin/?time=1680599936206#/login 这种 url 是没有问题的,虽然看起来怪。

看下其中一个 nginx 是不是有 try_files $uri $uri/ /index.html 这个配置。 不过我记得 hash 路由并不需要这个配置的。

qiangbro commented 1 year ago

我升级到1.5.0遇到这个问题,降级到1.3.1问题解决

GreatAuk commented 1 year ago

我升级到1.5.0遇到这个问题,降级到1.3.1问题解决

因为 1.3 刷新只是简单的 location.reload 目前的刷新是用的这个方法

function reloadPageWithoutCache() {
  const url = new URL(window.location.href)
  url.searchParams.set('__time__', Date.now().toString())
  window.location.replace(url.href)
}
GreatAuk commented 1 year ago

试下最新的 v1.5.1