Javascript限制网页只能在微信内置浏览器中访问


Posted in Javascript onNovember 09, 2014

那么问题就来了,这个网页首先涉及到了移动web前端开发,我优先选择了用HTML5+bootstrap组合来实现页面的美观效果,前端其他的任务交给javascript解决(这里我是完全使用原生javascript代码,没有用到任何的框架,因为考虑到手机加载网页的速度本来就慢,而且框架中很多用不到的功能也会随网页一起加载,耗费用户流量)。

一切功能都就绪以后,客户试用也觉得很满意,之后我就把代码提交到了正式的服务器上。不过,对方又突然提到了一点:你做的页面确实挺漂亮的,兼容性也不错,但是这个页面用电脑上的浏览器也是可以访问的,那么其他人就可以很随便地查看页面的源代码,进而copy整个页面,能不能有什么方法防止这一点?那么问题就又来了,我是第一次做微信二次开发,还没遇到过这样的需求,怎么搞定呢?

一时间想不出来,后来我就把这个问题先放了放,去做后台的一些业务。在做后台的一个数据采集功能时,PHP代码当中用到了$_SERVER['HTTP_USER_AGENT']这个参数,我突然想到浏览器访问网页时都会发送一个UserAgent给服务器,它里面包含了一些浏览器及用户操作系统的基本信息,既然微信有内置浏览器,那么用微信浏览网页时这个UserAgent里面会不会带上和微信相关的独有的标识呢(毕竟腾讯这么大个公司,而微信又是他们的核心产品之一)?干脆用代码打印一下它的UserAgent来一探究竟,javascript代码如下:

<script type="text/javascript">

    alert(navigator.userAgent);

</script>

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

Javascript限制网页只能在微信内置浏览器中访问

这一下果然还真的看到了不一样的地方,相信聪明的朋友也已经发现了,没错,就是这个东西: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,还是可以绕过这条限制的,总的来说就是防君子不防小人了,大家懂得。当然,如果哪位朋友有解决这个问题的更好方法,还麻烦在下面评论告知,技术在于相互的分享和交流嘛,呵呵。

Javascript 相关文章推荐
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 Javascript
jquery插件开发之实现google+圈子选择功能
Mar 10 Javascript
node.js下LDAP查询实例分享
Sep 30 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
Dec 08 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
Oct 09 Javascript
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
Jan 09 Javascript
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
Js经典案例的实例代码
May 10 Javascript
微信小程序wx:for循环的实例详解
Oct 07 Javascript
Vue安装浏览器开发工具的步骤详解
May 12 Javascript
JS面试题中深拷贝的实现讲解
May 07 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
Jun 01 Javascript
js闭包的用途详解
Nov 09 #Javascript
js闭包实例汇总
Nov 09 #Javascript
浅谈JS闭包中的循环绑定处理程序
Nov 09 #Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 #Javascript
js跨域问题浅析及解决方法优缺点对比
Nov 08 #Javascript
js 操作符汇总
Nov 08 #Javascript
jquery的总体架构分析及实现示例详解
Nov 08 #Javascript
You might like
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
使用URL传输SESSION信息
2015/07/14 PHP
详解PHP用substr函数截取字符串中的某部分
2016/12/03 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
IE php关于强制下载文件的代码
2008/08/23 Javascript
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
node中的session的具体使用
2018/09/14 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
python使用socket进行简单网络连接的方法
2015/04/29 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
PyQt5实现简易计算器
2020/05/30 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
Python如何实现转换URL详解
2019/07/02 Python
python def 定义函数,调用函数方式
2020/06/02 Python
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
护士思想汇报
2014/01/12 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python