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

Router in wechat webview #26

Closed
Huxpro opened this issue Oct 17, 2015 · 9 comments
Closed

Router in wechat webview #26

Huxpro opened this issue Oct 17, 2015 · 9 comments

Comments

@Huxpro
Copy link

Huxpro commented Oct 17, 2015

Hey, nice work guys.

我注意到你们使用 history.pushState() 实现了简单的路由,我在微信 webview 中测试了一下,有一个问题有点奇怪:使用微信 webview 上方的 Back 和使用“屏幕边缘左滑返回” 的效果完全不一样

当使用 Webview Back 时,所有的路由都很正常
但当通过屏幕边缘左滑返回时,路由好像失效了,直接退出了整个 webview。

我发现好像所有使用 pushState 实现路由的 web app 都有这个问题,
但是使用原始的 locatin.hash & hashchange 做路由的却没有这个问题……

但是它们确实都给 history.length +1 了……
是微信 webview 做了什么处理吗?还是 pushState 的表现在 iOS WebView 上本来有有不同?(Safari 是没有这个问题的)

@progrape
Copy link
Collaborator

@Huxpro 感谢关注,这个问题之前也留意到了,但是没有深究。昨天咨询iOS客户端同事屏幕边缘左滑返回的原理,是客户端监听webView:shouldStartLoadWithRequest:navigationType:事件,如果有触发该事件,就会做类似于history.length + 1的操作,然后就可以右滑返回。

调试发现,locatin.hash='#hash1'location.href = 'http://...'两种方式都可以触发到,但是pushState的方式却触发不到,所以就滑动就直接关闭而不是返回了。客户端同事在尝试解决~

今天发现有人问相同的问题http://stackoverflow.com/questions/33210121/html5-pushstate-not-trigger-shouldstartloadwithrequest 😁

目前demo页面改成设置hash的方式,可以滑动返回

progrape added a commit that referenced this issue Oct 21, 2015
#26 修复`pushState`导致微信从左边缘向右滑动无法返回上一页,而是直接关闭WebView的bug
@Huxpro
Copy link
Author

Huxpro commented Oct 28, 2015

@progrape 非常感谢如此周到的解答!
建议这个 issue 更名为 “Router with pushState in Wechat webview” 并保持 open 的状态;非常期待这个问题以后的进展!

@lynn328
Copy link

lynn328 commented Jan 27, 2016

有个情况,和路由幕边缘左滑返回 这两个操作相关:

背景:
  • 用原始的 locatin.hash & hashchange 做路由
  • iOS 8.4 + 微信 6.3.9
  • 有3级路由页面(first > second > third 顺序进入各级界面)
情况:
  • 在third界面时,用幕边缘左滑返回会短暂闪过first的画面,然后才显示second,
  • 但此时,再次幕边缘左滑返回,直接退出了webview(本应显示first)。

使用webview Back来返回,则全部正常,不会像上面一样丢失first界面。

@lijijordan
Copy link

rooter.js 是微信实现的么?还是用的开源的?

@progrape
Copy link
Collaborator

@lijijordan router.js 是我们为了呈现 demo 简单写的,源码单独存放在这里 https://github.com/progrape/router 。目前功能比较单一,仅满足我们的 demo 使用,生产环境推荐使用更专业的路由。

@bsnwong
Copy link

bsnwong commented Aug 26, 2016

请问如果使用其他框架该出现这种情况该怎么去解决呢,我用的是Framework7,但微博、Safari不会出现这个问题,微信就会

@sklme sklme closed this as completed Sep 29, 2016
@JasonLisa
Copy link

#515 # @ @lijijordan

@qingdie
Copy link

qingdie commented Feb 9, 2017

我反复测试发现,连续打开3个窗口后,侧滑返回只能两次,在第3个窗口侧滑时看到的是第一个窗口的图像,侧滑完成后页面突然变成了第二个窗口,再次侧滑页面关闭了,应该是返回第一个窗口,
但是点击顶上的返回按钮就一切都正常!

@qingdie
Copy link

qingdie commented Feb 9, 2017

从第3个窗口侧滑返回到第二个窗口时,再侧滑没有了,但是顶上返回键点击有效,

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

8 participants