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

重置 window.pluginWebUpdateNotice_.onClickRefresh方法不生效 #18

Closed xyyaxyy closed 1 year ago

xyyaxyy commented 1 year ago

window.pluginWebUpdateNotice.onClickRefresh = () => window.location.reload() 我放在 入口文件 main.js 中的, 控制台 console.log(window.pluginWebUpdateNotice) 也没有

GreatAuk commented 1 year ago
image

没问题吧,要不你试下

setTimeout(() => {
  console.log(window.pluginWebUpdateNotice_)
  window.pluginWebUpdateNotice_.onClickRefresh = () => window.location.reload()
}, 0)
xyyaxyy commented 1 year ago

是的,用setTimeout可以设置成功,但是页面重新加载之后,会再次弹出 notification 提示更新。 相当于会弹出两次提示,我必须再刷新一下页面

GreatAuk commented 1 year ago
image

应该是因为 script 标签的 defer 属性导致代码执行时机不对。加defer 的初衷是想插件的加载尽量不影响项目的运行。 不过我看现在用 vite 之类的新工具打包,是没问题的。因为其他的 js 文件引入方式,也是用的 type="module"。 我考虑下是不是把 defer 删了。

GreatAuk commented 1 year ago

方便的话,把你打包后的 index.html 截图看下。

xyyaxyy commented 1 year ago

image

vue2的项目

GreatAuk commented 1 year ago
image

你没改过 index.html 吧?这里插件重复注入了代码😅,我想不出什么 bug 会导致这种情况。 还有麻烦把其他的 script 引入方式也截图下。

GreatAuk commented 1 year ago

试下最新的 v1.5.1

xyyaxyy commented 1 year ago

好的,感谢大佬

GreatAuk commented 1 year ago

现在默认用 window.location.reload 刷新页面,不用自定义。

image 我还是好奇这个重复注入代码是怎么产生的...。我看你另一个 issue 给我的项目链接是没这种情况的。