Javascript限制网页只能在微信内置浏览器中访问
那么问题来了。这个网页首先涉及移动web的前端开发。我选择了HTML5 bootstrap组合来达到页面的美观效果,前端的其他任务都留给了javascript(这里我完全使用原生javascript代码,没有使用任何框架,因为考虑到手机加载网页比较慢,框架中很多没有用到的功能都会和网页一起加载,消耗用户流量)。
所有功能都准备好之后,客户对试用很满意,然后我把代码提交给官方服务器。但是对方突然提到一点:你做的页面确实很漂亮,兼容性也很好,但是这个页面也可以通过电脑上的浏览器访问,这样别人就可以随便查看页面的源代码,然后复制整个页面。有什么办法可以防止这种情况发生?然后问题又来了。第一次做微信二次开发。我还没有遇到这样的需求。怎么修?
当时我想不起来。后来我把这个问题放在一边,做了一些后台业务。在后台执行数据收集功能时,参数$_SERVER['HTTP_USER_AGENT']在PHP代码中使用。突然想到,浏览器访问网页时,会向服务器发送一个UserAgent,里面包含浏览器和用户操作系统的一些基本信息。既然微信内置了浏览器,这个UserAgent在用微信浏览网页的时候会不会带一个和微信相关的独特logo(毕竟腾讯这么大的公司,还有微信,简单打印一下它的UserAgent用代码就知道了。javascript代码如下:
复制代码如下: script type=' text/JavaScript ' alert(navigator。user agent);/script
我在手机上得到如图所示的结果:
果然看到了不一样的东西,相信聪明的朋友已经发现了。对,就是这个东西:micro messenger/6 . 0 . 0 . 50 _ r 844973 . 501,斜杠后面的字符串是我目前使用的微信的版本号,前面应该是微信独有的logo。其实一开始我是把它看成一条微消息,以为中文翻译的意思是“微消息”,但仔细一看发现不是,也不知道messenger这个词有“messenger,Messenger”的意思,所以也没觉得奇怪。这个logo应该说在其他浏览器中是没有的,所以解决方案就来了,请看代码:
复制的代码代码如下: Script Type=' text/JavaScript '//正则匹配浏览器的UserAgent,如果不包含微信的唯一标识,则是另一个浏览器var user agent=navigator。用户代理;if(user agent . match(/micro messenger/I)!='MicroMessenger') {//此处的警告框会屏蔽当前页面并继续加载提醒('此访问已被禁止:必须使用微信内置浏览器才能访问此页面!');//以下代码使用javascript强制关闭当前页面var opened=window.open('约: blank ',' _ self ');opened.opener=nullopen . close();}/脚本
这段代码已经在安卓、iPhone、iPad和PC上测试过了。只要微信里没有打开网页,上面的警告框就会先弹出来。此时,背面为空白,没有加载任何内容。单击警告框中的确定按钮后,最后三行代码将强制关闭当前页面。好了,这里是用户本义的实现,大家可以简单收工了。
等等,我们真的可以结束了吗?你确定不会有其他问题吗?当然不是。事实上,这种方法不会让你坐以待毙,放松心情,因为对于假冒的UserAgent来说,这个限制还是可以规避的。总的来说是防君子不防小人,大家都知道。当然,如果有朋友有更好的方法解决这个问题,请在下面评论告诉我,技术在于相互分享和交流,呵呵。
版权声明:Javascript限制网页只能在微信内置浏览器中访问是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。