[微信第三方] Javascript限制网页只能在微信内置浏览器中访问

[复制链接]
发表于 2015-3-3 16:48:15 | 显示全部楼层 |阅读模式
最近正在开发一个微信公众账号,其中有一项功能是用户发送文字消息给公众号,然后公众号返回图文消息给用户,用户再点击图文消息即可跳转到一个网页链接,在微信的内置浏览器中打开。' D2 M5 p& n; @  h7 w
那么问题就来了,这个网页首先涉及到了移动web前端开发,我优先选择了用HTML5+bootstrap组合来实现页面的美观效果,前端其他的任务交给javascript解决(这里我是完全使用原生javascript代码,没有用到任何的框架,因为考虑到手机加载网页的速度本来就慢,而且框架中很多用不到的功能也会随网页一起加载,耗费用户流量)。
$ r- f( `& p6 j& _$ D解决方案就来了,请看代码:" w- z: F* H4 A  Q! P
  1. . \8 ?2 h" S9 ?) h1 U- s
  2. <script type="text/javascript">
      Q6 F+ g8 S$ E2 s- E' [& i
  3.     // 对浏览器的UserAgent进行正则匹配,不含有微信独有标识的则为其他浏览器) s* q1 j' {) _6 v; _# B6 T! c4 v
  4.     var useragent = navigator.userAgent;- S/ }) r. m1 u5 m  u2 |3 O7 _
  5.     if (useragent.match(/MicroMessenger/i) != 'MicroMessenger') {+ @( `8 n# }( y* y' Z) ^
  6.         // 这里警告框会阻塞当前页面继续加载* e  j8 `- F% ]+ @! z
  7.         alert('已禁止本次访问:您必须使用微信内置浏览器访问本页面!');
    % K, g: g8 b1 T# x) I) H5 v
  8.         // 以下代码是用javascript强行关闭当前页面8 s7 X4 z& y- d# q) b' z- s
  9.         var opened = window.open('about:blank', '_self');
    ( l+ J/ ]# |1 @" Z) m, w
  10.         opened.opener = null;
    6 b1 C6 @8 y6 G' t: O
  11.         opened.close();' N/ B0 P( |6 K( w/ f5 T
  12.     }+ `5 w6 i& ^' h$ ^7 k  h2 [
  13. </script>
    & M2 R; \! W% L# v& s. h7 O
复制代码
这段代码在Android、iPhone、iPad、PC上都进行了测试,只要不是在微信内部打开网页的,首先就会弹出上面那个警告框,此时后面的页面是空白的,什么都还没加载,当点击警告框的确定按钮之后,最后三行代码将强行关闭当前页面。OK,到这里算是实现了用户原本的意思了,可以简单收工了。
3 Q% h: ~1 E9 C- _5 d0 K
; [4 i% G5 q* A% z( C( x/ r* ?3 Z5 x等等,真的可以这样收工了么?你确定不会有其他问题?当然不是,其实这个方法并不会让你高枕无忧,因为对于伪造的UserAgent,还是可以绕过这条限制的,总的来说就是防君子不防小人了,大家懂得。当然,如果哪位朋友有解决这个问题的更好方法,还麻烦在下面评论告知,技术在于相互的分享和交流嘛,呵呵。
2 @6 W7 L) m1 r; O
; o: D8 a# T4 ^/ |, I
- a0 q4 s" \$ D1 u




上一篇:微信墙其他注意事项
下一篇:微信界面隐藏右上角分享按钮完美代码
回复

使用道具 举报

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

快速回复 返回顶部 返回列表