在做益米的下载页的时候发现微信浏览器有些地方需要注意。
链接跳转
跳转苹果App Store:第一次是设置链接为https://appsto.re/cn/z3aa6.i
发现在微信里这个链接不能跳转,查了资料后发现有一种方法:微信中打开app store连接。意思就是微信会内部把链接重定向,判断是App Store就阻止掉。所以在页面里面改写链接,改成在他们域名下,再使用JS进行跳转。具体方法是前面加上http://mp.weixin.qq.com/mp/
再重定向:redirect?url=
后面再把原来的链接里的冒号改成%3A
,斜杠改为%2F
。所以链接变成了:http://mp.weixin.qq.com/mp/redirect?url=http%3A%2F%2Fappsto.re%2Fcn%2Fz3aa6.i
尝试之后发现这个方法已经失效了。
无奈之下使用引导用户使用safari打开:
引导跳转
制作遮罩层:
|
|
然后进行事件绑定:
确定是否是在微信内打开使用这个函数:
然后自己比较坑爹的事情是,第一次是这么用的:if (is_weixn)
然后就不管是不是微信打开都是有遮罩层。
简直想抽死自己
is_weixn
是一个函数,所以if(is_weixn)
就是判断是否有一个变量。所以就一直为真。
if (is_weixn())
才会执行这个函数返回结果。
然后就需要判断是电脑端还是手机端了:
欸好像不对 只要是微信端才绑定函数吧。。
我了个大草
判断终端类型:
都是使用navigator
的userAgent
。和判断微信大同小异。
这里使用的是indexOf()
,返回值大于-1说明有指定的字符串。哇这个返回值写法有点酷炫学一下好了。
然后是微信使用的方法:match()
使用的是正则表达式。
正则表达式:
flags: g(全局模式) i(不区分大小写) m(多行模式)
下一次详细讲。
然后是match() 接受正则表达式或者RegExp对象,返回数组,数组存放结果。
但是测试后发现直接按照例子的写法也是可以的:ua.match(/MicroMessenger/i)=="micromessenger"
不知道为什么不过里面的match必须是类似于/*/ 不能使用变量;
接下来又是事件绑定
微信里面为了用户体验,点击apple按钮的时候不要进行网络的加载,否则必须等加载完成用户才可以点击菜单使用浏览器打开,所以阻止了a标签的默认跳转行为:event.preventDefault();
然后就是遮罩层的显示和隐藏了。
另外在浏览器打开后,https://appsto.re/cn/z3aa6.i
这个链接会再次跳转到itunes:https://itunes.apple.com/cn/app/yi-mi/id973082073?l=en&mt=8