最近在做微信开发,但是一直忽略了一个问题 如何限制页面只能在微信中打开?

在PHP脚本中 可以通过判断 HTTP_USER_AGENT 来判断浏览器是否为微信内置浏览器 (用电脑上的浏览器访问,那么其他人就可以很随便地查看页面的源代码,进而copy整个页面)

用微信浏览网页时这个UserAgent里面的微信相关的独有的标识,用代码印证下它的UserAgent,

javascript代码如下:

<script type="text/javascript">
   alert(navigator.userAgent);</script>

不过ua太容易伪造了,如果关闭javascript插件就可以把所有东西都复制下来了,

建议这样来判断

if( typeof WeixinJSBridge !== "undefined" ) {  return true;
}



在我的手机上得到了如图所示的结果:

就是这个东西:MicroMessenger/6.0.0.50_r844973.501,斜杠后面的这一串就是我当前使用的微信的版本号,前面则应该是微信的一个独有标识了。其实我一开始看成了MicroMessage,Messenger这个词有“报信者,送信者”的意思,这个标识是其他浏览器不会有的,那么解决方案就来了,请看代码:

<script type="text/javascript">
   // 对浏览器的UserAgent进行正则匹配,不含有微信独有标识的则为其他浏览器
   var useragent = navigator.userAgent;    if (useragent.match(/MicroMessenger/i) != 'MicroMessenger') {        // 这里警告框会阻塞当前页面继续加载
       alert('已禁止本次访问:您必须使用微信内置浏览器访问本页面!');        // 以下代码是用javascript强行关闭当前页面
       var opened = window.open('about:blank', '_self');
       opened.opener = null;
       opened.close();
   }</script>

这段代码在Android、iPhone、iPad、PC上都进行了测试,只要不是在微信内部打开网页的,首先就会弹出上面那个警告框,此时后面的页面是空白的,什么都还没加载,当点击警告框的确定按钮之后,最后三行代码将强行关闭当前页面。OK,到这里算是实现了用户原本的意思了,可以简单收工了。

等等,真的可以这样收工了么?你确定不会有其他问题?当然不是,其实这个方法并不会让你高枕无忧,因为对于伪造的UserAgent,还是可以绕过这条限制的,总的来说就是防君子不防小人了,大家懂得。当然,如果哪位朋友有解决这个问题的更好方法,还麻烦在下面评论告知,技术在于相互的分享和交流嘛,呵呵。

感谢您阅读这篇文章,希望它对您已经有了帮助!若文中有任何错误,联系邮箱:965174@qq.com  谢谢!