摘要: 微信浏览器是在微信安装时内置在微信中的,针对浏览器的类型我们可以设置相应的安全策略——仅允许在微信内置浏览器中打开。本文选自《微信企业号开发完全自学手册》。

1 JSAPI模式介绍

  在介绍JSAPI模式之前,首先需要介绍一下微信内置浏览器。可能很多人注意到了,在打开微信“朋友圈”链接的时候会出现进度条,如图5.1所示,这实际上就是微信内置浏览器访问页面的进度。也就是说,“朋友圈”是通过微信内置的浏览器访问的手机页面,并且微信浏览器是在微信安装时内置在微信中的。
          
                    微信内置浏览器进度条

注意:iPhone(苹果)和Android(安卓)的微信内置浏览器不同,安卓手机上的微信使用的是QQ浏览器X5内核,苹果手机上的微信使用的则是Safari浏览器。

  JSAPI模式是通过调用微信JS-SDK开发手机Web页面的模式,本质上亦是开发B/S(Browser/Server,浏览器/服务器模式)服务,只是业务上较以往的PC业务更加方便,功能上也稍具差异。在微信JSAPI模式下,不仅可以调用微信拍照、选图、语音、位置等手机功能,还可以实现微信分享、扫一扫等微信特有的功能,同时,可以使用HTML5完成页面效果的丰富,实现更加完美的用户体验。

2 浏览器类型安全访问

  针对浏览器的类型我们可以设置相应的安全策略—仅允许在微信内置浏览器中打开。
  通过ServletActionContext.getRequest().getHeader("User-Agent")获得当前浏览器代理信息,各类型浏览器代理信息如下:
(1)IE浏览器:

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)

(2)Google浏览器:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36

(3)360安全浏览器:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36

(4)UC浏览器:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/5.7.15319.202 Safari/537.36

(5)手机QQ浏览器:

Mozilla/5.0 (Linux; Android 4.2.2; N1W Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.2 TBS/036558 Safari/537.36 V1_AND_SQ_6.5.0_390_YYB_D QQ/6.5.0.2835 NetType/WIFI WebP/0.3.0 Pixel/1080

(6)Android微信内置浏览器:

Mozilla/5.0 (Linux; Android 4.2.2; N1W Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.2 TBS/036558 Safari/537.36 MicroMessenger/6.3.23.840 NetType/WIFI Language/zh_CN

(7)iPhone微信内置浏览器:

Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 MicroMessenger/6.3.24 NetType/4G Language/zh_CN

  通过对比多个浏览器的代理信息,可以发现一个关键信息“MicroMessenger”。通过“MicroMessenger”便能够区分请求的来源,从而保证信息只能在微信中打开,示例代码如下:

    HttpServletRequest req = ServletActionContext.getRequest();//识别微信浏览器String userAgent=req.getHeader("User-Agent");//里面包含了设备类型if(-1==userAgent.indexOf("MicroMessenger")){//如果不是微信浏览器,则跳转到安全页return "safePage";}

  JSP页面中,防止外部浏览器打开方法的示例代码如下:

<%//识别微信浏览器String userAgent=request.getHeader("User-Agent");//里面包含了设备类型if(-1==userAgent.indexOf("MicroMessenger")){//如果不是微信浏览器,则跳转到安全页request.getRequestDispatcher("noRightPage.jsp").forward(request, response);}
%>

  备注:在微信中,可以通过userAgent.indexOf("iPhone")来区分是Android手机还是iPhone手机,示例代码如下:

HttpServletRequest req = ServletActionContext.getRequest();
String userAgent=req.getHeader("User-Agent");//里面包含了设备类型
if(-1!=userAgent.indexOf("iPhone")){
//-------如果是苹果手机----------//
//此方法需要浏览器自己能够打开,iOS可以,但是微信Android版内置浏览器不支持
}else{
//如果非苹果手机,则自己处理文档
}

  本文选自《微信企业号开发完全自学手册》,点此链接可在博文视点官网查看此书。
                    
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                       

微信JSAPI模式与浏览器类型安全访问相关推荐

  1. 微信限制内置浏览器的访问方法

    1.通过JS判断微信的独有标识UserAgent,但是对于伪造的UserAgent,还是可以绕过该限制. <script type="text/javascript"> ...

  2. 微信企业号开发七:JSAPI模式

    微信中的第三个模式就是JSAPI模式,这里面可以查看地理位置.分享qq.扫一扫等功能,这个功能的使用 1.在页面引入js <meta name="viewport" cont ...

  3. 微信jsApI及微信分享对应在手机浏览器的调用总结。

    摘录自别人的博客: 第一篇:微信内置浏览器的JsAPI(WeixinJSBridge续) 之前有写过几篇关于微信内置浏览器(WebView)中特有的Javascript API(Javascript ...

  4. 【TUN模式】对QQ或者微信域名、QQ邮箱、微信公众号文章、微信开发者社区相关的网站访问非常慢、图片加载不出来、网页空白的解决方案

    一.问题背景 最近在电脑上登录微信时,或者浏览微信公众号的文章时,经常出现卡顿得出不来图片的情况,即使出来了也是排版异常. 二.研究现状(哈哈哈哈科研人的写作习惯?) 目前网上有些大咖对这个问题给出的 ...

  5. 电脑微信QQ正常登录,浏览器无法访问网站

    之前实习的时候,我们老师这样讲--难倒网络工程师的往往是网络(虽然我目前不是网络工程师. 今天,电脑能上QQ微信,但是浏览器不能访问.切换浏览器--不行,使用火绒和联想电脑管家的网络诊断修复--不行, ...

  6. Mac连接网线能够接收微信消息,浏览器不能访问网页

    1. 问题 Mac连接网线能够接收微信消息,浏览器不能访问网页. 访问网页,有提示:如下信息,找不到IP地址 2. 解决方法 和其他人的配置进行比较,发现自己的网络设置中,DNS服务器显示的是8.8. ...

  7. 浏览器兼容模式下网页无法访问

    浏览器兼容模式下网页无法访问 解决方案: 打开360浏览器" 打开菜单,点击"工具",找到"Internet属性"并点击 点击"高级&quo ...

  8. php 公众号内h5支付宝支付宝支付宝支付宝支付,微信浏览器中支付宝wap支付和微信JSAPI公众号支付...

    手机浏览器只有支付宝wap支付,微信浏览器中出现支付宝wap支付和微信JSAPI公众号支付,其中支付宝wap在线支付没有在新窗口打开(兼容大部分手机),Thinkphp3.2公众号支付 下载资源 下载 ...

  9. 微信开发php插件下载图片,微信开发之微信jsapi选择图片,上传图片,预览和下载图片方法...

    参数描述 appId公众号的唯一标识 应用id timestamp生成签名的时间戳 nonceStr生成签名的随机串 signature签名 上述表格中的四个参数是初始化调用微信jsapi的凭证,咱们 ...

  10. 微信JSAPI支付对接流程及支付接口设计

    文章目录 前言 一.JSAPI支付场景及逻辑 二.开发步骤 1.设置支付目录 2.设置授权域名 3.业务流程 三.代码设计 1. 支付页面 2. Controller 3. JS调起支付 4. 工具类 ...

最新文章

  1. 什么是NullReferenceException,如何解决?
  2. 李飞飞获全球最权威女性领导力奖 Athena Award,讲述推动AI多元化三大原因(视频)...
  3. 科普:Flume是啥?干嘛用的?
  4. OpenStack实践(一):Ubuntu16.04下DevStack方式搭建p版OpenStack
  5. Qt Creator使用3D组件
  6. 只提取单元格中的数字_提取Excel单元格中的数字(4类)及原理
  7. ik分词和jieba分词哪个好_Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考...
  8. ETL工具学习以及安装部署
  9. dev gridcontrol 单元格内容复制_Excel中的复制粘贴,不只是你想的那么简单的
  10. IIS 添加支持json格式文件
  11. tf data 常用操作
  12. c51间隔点亮c语言编程,51系列单片机C语言编程
  13. js加载flv格式视频
  14. 百度wz竞价推广关键词排名的影响因素大全
  15. python第二版课后答案第七章7.5_IDA7.5 启动基础配置
  16. 10win重启计算机黑屏,win10启动后黑屏怎么回事_windows10开机启动黑屏如何解决
  17. 临别给《生活大爆炸》做个台词数据分析,你猜谢耳朵最爱说什么?
  18. 推荐21款最佳 HTML5 网页游戏
  19. 针对Linux系统主机,进入修复模式,解决开机报错问题
  20. XSell和Xftp的简单使用方法

热门文章

  1. RK3288 error: undefined reference to 'LOGD'
  2. Mysql缺少可执行的命令
  3. 设置Linux用户无口令登陆方式
  4. 10个免费的PHP编辑器/开发工具
  5. 冬至了,回家羊肉。:)
  6. 一个简单的SQL最优写法讨论(1)
  7. 支持向量机原理(三)线性不可分支持向量机与核函数
  8. leetcode 1037. 有效的回旋镖(Valid Boomerang)
  9. 如何排查Oracle表空间不足问题
  10. 面向对象程序的设计模式