Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在ios的safari上bfcache失效(MessageChannel引起) #17

Closed
wen911119 opened this issue May 2, 2018 · 1 comment
Closed

在ios的safari上bfcache失效(MessageChannel引起) #17

wen911119 opened this issue May 2, 2018 · 1 comment

Comments

@wen911119
Copy link

wen911119 commented May 2, 2018

问题复现:
1.打开下面dotWe链接:
http://dotwe.org/vue/b9a2bf2c5b5d39d61026f09b28905239
2.点击手机模型下方的“Open it in a new page”得到独立页面的地址
3.用ios的safari的打开得到的地址
4.在列表页滚动一段距离,然后点击随便一个item跳转到下一页。
5.在下一页返回

期望表现:
应该从bfcache中恢复页面,返回后列表停在原来位置。

实际表现:
列表回到了顶部,页面js重新执行了。如果监听页面的pageshow事件,会发现event.persisted始终是false。

这个bug最早是在vue2.5.16上发现的点这里
因为vue2.4.4以后优先用MessageChannel的实现nextTick导致了这个bug,所以在一个标准的vue工程里把vue版本降回2.4.3就没有问题了。
但是!在weex的工程里,就算我把vue版本降回2.4.3,还是不行,最终发现可能是下面这一行的问题

import 'core-js/modules/es6.promise'

core-js这个库也用到了MessageChannel了来实现task

(飞猪的线上产品也是有这个问题的:https://m.fliggy.com/?_projVer=0.1.128)

@MrRaindrop
Copy link
Member

@wen911119 我这边发现可能是老版本的 webpack-dev-middleware 的问题,我用 vue-cli 建立的新仓库,用新版本的 dev-server 跑就没有任何问题,于是我尝试 build 出 prod 环境的 bundle,并在 http-server 里面跑,发现在 Vue2.4.3 里并没有这个问题,即使我的代码里包含了这行 polyfill. 目前至少结论是,不会因为 import 了这行 promise polyfill 就导致 bf-cache 出现问题. 不知道你这边是否和我一样是由于 hot reload 的 server 导致,你可能还需要进一步看下.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants