最近正在开发一个微信公众账号,其中有一项功能是用户发送文字消息给公众号,然后公众号返回图文消息给用户,用户再点击图文消息即可跳转到一个网页链接,在微信的内置浏览器中打开。
: h7 y4 r4 q E m! J' |" V, o那么问题就来了,这个网页首先涉及到了移动web前端开发,我优先选择了用HTML5+bootstrap组合来实现页面的美观效果,前端其他的任务交给javascript解决(这里我是完全使用原生javascript代码,没有用到任何的框架,因为考虑到手机加载网页的速度本来就慢,而且框架中很多用不到的功能也会随网页一起加载,耗费用户流量)。
8 ?! Z. R7 J% U% w1 Y T解决方案就来了,请看代码:
3 ~( l4 |: E$ q0 Q B0 P
. \# M. S4 E! d- <script type="text/javascript">9 T( _$ m( l8 X2 k: u5 x
- // 对浏览器的UserAgent进行正则匹配,不含有微信独有标识的则为其他浏览器5 S7 ^& k' ]. P. C C8 I. z8 B
- var useragent = navigator.userAgent;
% `4 m+ Z7 [4 q2 d( D - if (useragent.match(/MicroMessenger/i) != 'MicroMessenger') {
; t" X# _# Q$ @0 x - // 这里警告框会阻塞当前页面继续加载
5 F9 L: o2 y. c+ c+ W- ?0 \2 m - alert('已禁止本次访问:您必须使用微信内置浏览器访问本页面!');8 c& Z d* R1 g' l. z0 u! k
- // 以下代码是用javascript强行关闭当前页面
( G7 w: c A! a C - var opened = window.open('about:blank', '_self');
3 G7 K4 }% G2 j) K5 n- u - opened.opener = null;
$ E9 h+ J% }$ G% r, `1 m; f6 Y - opened.close();1 ~; Z$ Q- S7 f/ y7 K( Y, u% L$ j% v
- }
6 @. j$ p3 ]- J2 Y - </script>" N- l; o- x) o
复制代码 这段代码在Android、iPhone、iPad、PC上都进行了测试,只要不是在微信内部打开网页的,首先就会弹出上面那个警告框,此时后面的页面是空白的,什么都还没加载,当点击警告框的确定按钮之后,最后三行代码将强行关闭当前页面。OK,到这里算是实现了用户原本的意思了,可以简单收工了。
0 @6 K+ F$ C7 l5 W
( M. ^: y! Y+ {* E7 [ }0 o8 y等等,真的可以这样收工了么?你确定不会有其他问题?当然不是,其实这个方法并不会让你高枕无忧,因为对于伪造的UserAgent,还是可以绕过这条限制的,总的来说就是防君子不防小人了,大家懂得。当然,如果哪位朋友有解决这个问题的更好方法,还麻烦在下面评论告知,技术在于相互的分享和交流嘛,呵呵。
- E1 l; c+ b8 G
1 t8 R& _. o2 i2 o
" Z/ Y6 q- O- i |
上一篇:微信墙其他注意事项下一篇:微信界面隐藏右上角分享按钮完美代码
|