周五搞一个关于用户注册的活动页面,有个发验证码的操作,用户点击发送验证码后,会弹一个 alert(当然是自己写的,不是浏览器原生的那个)提示用户已注册,去登录,点击“确定”之后,就会跳转到登录页去。

一开始,点击确定按钮后,用 window.location.href='' 去实现。用我的 Nexus 6 测试的时候,微信提示:

网页无法打开

位于 http://xxx.xxx.com/xxx 的网页无法加载,因为:
net::ERR_NAME_NOT_RESOLVED

由于跳转到的 url 并不是我们项目的,我以为是那边还没有搞定。觉得 ok 了,就先这样吧。

这个时候问题出现了,后端的小伙伴是 iPhone,他也测了一下,发现点了确定之后跳不过去啊,连错误页也没有。进度条过了一下,可是还是当前页面,alert 都还在。

怒 Google 了一把,网上有很多说 Android 版微信浏览器,window.location.href 很多跳转不了的,要在 url 后面加时间戳,可是没说 iOS 不行啊。。。不管了,怒加时间戳试试,果然还是跳不过去。

由于项目着急,想着这么不行的话,干脆把按钮换成了 a 标签,想着 a 标签总不能跳不动吧。

嗯,结果果然出乎意料,a 标签都跪了,还是一模一样的情况。Android 微信显示那个错误页,iOS 进度条过一下,但是页面无任何变化。

后端大哥提出换个 url 试试?换了个百度的地址,额,无论 Android 还是 iOS 都成功跳转到了百度。我们开始怀疑起 url 的问题来,难道被微信的某种安全机制挡住了?

这时候突然发现 url 里有个 download, 怀疑是不是微信不让乱下载啊,去掉 download 试试。。。果然还是不行。。。

然后找相关的项目组看看是否仍然有这个问题。发现,我们跳转的 url 本身就不对!

真相浮出了水面:

当链接到的 url 无法打开时,Android 版微信浏览器会显示那个错误页,而 iOS 版微信浏览器的进度条会过一下,而页面本身仍然存在,此外没有任何错误提示。

为什么就不能给个报错呢。。。哭。。。折腾了三个小时啊。。。