前端判断是否APP客户端打开触屏,实现跳转APP原生组件交互之遐想
今天做了一个html的活动页面,本来马上就要完工,准备开开心心收尾,结果~...
产品突然提出需要说,要讲html中的某些交互和APP原生组件挂钩,心里一万头xxx奔过~
静下心来思考
以往我们是判断是否客户端打开都依赖于后端,通过app主动拼接参数的方式,传递给后端,后端告诉前端本次的加载是在app里还是app外,实现页面的特殊功能
那我们发现,这个方式环节和局限性太多,我们无法保证客户端一定能够每个触屏页面都拼接我们需要的参数,而且我们的触屏页面有很多种,有的是活动需要的,有的是动态,有的是静态
而且APP里头有很多途径可以打开,而且新的功能页面还在持续增加,这样就导致我们每次开发前必须定对好,确保它的正确性,缺乏容错性,并且缺乏安全性,而且如果客户端已经发布将只能重新发布进行修正
那么我们能不能通过更简单的方式直接通过 前端对客户端 的方式来实现呢,答案肯定是可以的~,下面还是从产品的需求说起。
产品要求某个静态资源页面中的某些连接,在app外打开的时候跳转的是正常的触屏页面,在app中打开的时候则跳转app的原生交互页,咋一听,需求咋这么变态呢~
如果利用以往的方式,我们就得把这些页面转化为动态的页面,而且还得和客户端进行协定处理,工作量又被增加,开发效率降低,而且页面性能也会受影响。
这导致我必须寻求一种新的解决方案。
首先,我用静态页调取了一个客户的提供的js方法,提示
is not defined
什么鬼呢,一般我们见到的都是
undefined
那什么是is not defined?
从字面意思上来讲就是未定义,也就是未申明。就是这个变量(对象)压根就没有,如下:
console.log(abc);//abc is not defined
可能还一知半解,我们继续往下看。
is not defined 和 undefined 区别。
我们大多数人都知道 undefined ,却不知道 defined , undefined 是未定义,如下:
var abc;
console.log(abc);//undefined
console.log(abc.a);//so.a is undefined
这个时候输出的是 undefined 。访问变量的属性就会提示is undefined 就是这个变量so 未定义值(类型);
而defined 呢,如下:
console.log(abc);//abc is not defined
其实如果理解一下其实就是未申明。也就是可以理解对象使用的过程是,先声明后赋值,在赋值的过程中确定了这个的类型。

所以总结一下:is not defined 优先于 undefined ,也就是先判断这个对象是否申明了,如果没申明直接就 is not defined,如果已经申明,那么再看有没有赋值(类型),如果没有那么就是 undefined 或者 访问对象的属性就是 is undefined 。
如何判断 undefined,undefined 很好判断,如下:
var abc;
console.log(abc == undefined);//true
console.log(abc === undefined);//true;
console.log(typeof abc == 'undefined');//true
console.log(typeof abc === 'undefined');//true
console.log(!abc);//true
等等,有很多方式,但是这些都不是我需要的啊,如何判断is not defined,这个才我们今天的重点.. ,直接上代码..
try {
//调取客户端方法;
} catch (e) {
location.href = '';//跳转触屏版地址
}
是不是很简单,很高效,我们利用浏览器如果程序出现错误,会抛出异常的特性,来捕获这个操作,执行我们指定的操作;
至此,我们得到相对完美的解决方案,又一次提升了自己,O(∩_∩)O哈哈~
接下来我们遐想一下
那我们是不是可以让将全部的前端和客户端交互的操作利用这样的方式实现呢?
首先,客户端定义一个被触屏调用的js方法,这个方法的作用就是告诉客户端,你是在我的客户端打开的
然后,触屏调用这个方法,如果成功则将页面交互处理为在客户端的模式,如果失败则处理为触屏版的模式
这样处理是不是更方便呢,不知大家还有什么更好的方式呢~~~~
作者:旧旧的 <393210556@qq.com> 解决问题的方式,就是解决它一次
前端判断是否APP客户端打开触屏,实现跳转APP原生组件交互之遐想的更多相关文章
- WAP、触屏版网站及APP的区别
1.电脑版网站: 电脑版网站是指用户通过台式或者笔记本电脑浏览器打开的网站,也就是我们平时上网所访问的网站.其支持和兼容IE6.IE7.IE8.IE9.IE10.Firefox.Chrome等各种主 ...
- 判断浏览器及设备的打开方式,自动跳转app中
如果安装了APP则自动条状app,如果没安装则自动跳转下载页面 <head> 放在head中加载 <script> function redirect() { var appU ...
- 【WAP触屏】YouKu视频弹窗播放组件
(function(window){ /* youku api : http://open.youku.com/tools 调用方法 : LM_youkuPop.open('XODI5Mzk3MDAw ...
- 转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
本文转载自CSDN的jzj1993,原文连接:http://blog.csdn.net/jzj1993/article/details/39158865 有时我们需要使用安卓实现在后台模拟系统按键,比 ...
- Bootstrap幻灯轮播如何支持触屏左右滑动手势?
最近ytkah在学习用bootstrap搭建网站,Bootstrap能自适应pc端和手机端,并且移动设备优先,适合现如今移动营销.bootstrap是封装好的框架,需要某些功能只需调用相应的组件就可以 ...
- iOS 7 新版微信 URL 不支持跳转 App Store 的解决方案
今天早上刚到公司,就收到反馈说公司前端页面的下载按钮在 iOS 7 的微信内置浏览器里面点击无效,经过确认之后,前端代码是正常的,问题出在了微信上,然后谷歌之,原来腾讯在***. 是 BUG 还是刻意 ...
- 点击页面判断是否安装app并打开,否则跳转app store的方法
常常有这样的场景,咱们开发出来的APP需要进行推广,比如在页面顶部来一张大Banner图片,亦或一张二维码.但往往我们都是直接给推广图片加了一个下载链接(App Store中的).所以咱们来模拟一下用 ...
- 【JS】点击页面判断是否安装app并打开,否则跳转下载的方法
应用场景 App产品在运营推广上有一个需求,就是要求可以让用户在访问我们的推广网页时,就可以判断出这个用户手机上是否安装了我们的App,如果安装了则可以直接在网页上打开,否则就引导用户前往下载.从而形 ...
- javascript如何判断访问网页的设备及是否支持触屏功能
var system ={}; var p = navigator.platform; system.win = p.indexOf("Win") == 0; system.mac ...
随机推荐
- Python学习笔记(五)之Python操作Redis、mysql、mongodb数据库
操作数据库 一.数据库 数据库类型主要有关系型数据库和菲关系型数据库. 数据库:用来存储和管理数的仓库,数据库是通过依据“数据结构”将数据格式化,以记录->表->库的关系存储.因此数据查询 ...
- B1013 数素数(20分)
B1013 数素数(20分) 令 \(P_i\)表示第 i 个素数.现任给两个正整数 \(M≤N≤10^4\),请输出 \(P_M\)到 \(P_N\)的所有素数. 输入格式: 输入在一行中给出 M ...
- 并查集:HDU5326-Work(并查集比较简单灵活的运用)
Work HDU原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5326 Time Limit: 2000/1000 MS (Java/Others) M ...
- 关于mybatis 一级缓存引发的问题
场景: 由于在一个方法中存在多个不同业务操作 private void insertOrUpdateField(CompanyReport entity) { //计算并数据 calcReportDa ...
- 微信SSL证书更换的检查与安装方法
Ubuntu, Debian 查看根证书 确认操作系统上,是否存在以下文件: /etc/ssl/certs/DigiCert_Global_Root_CA.pem /etc/ssl/certs/Bal ...
- Python框架之Django学习笔记(五)
第一个Django网页小结 进来的请求转入/hello/. Django通过在ROOT_URLCONF配置来决定根URLconf. Django在URLconf中的所有URL模式中,查找第一个匹配/h ...
- Struts之上传
上传的jsp写法: <tr> <td width="50%" align="left">软件上传: <input type=&qu ...
- STL学习笔记5--map and multimap
Maps是一种关联式容器,包含“关键字/值”对. Multimaps和maps很相似,但是MultiMaps允许重复的元素. 简单介绍: 1.声明,首先包含头文件 “map” map <int, ...
- python 学习分享-迭代器与生成器篇
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式.. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后 ...
- 12 JVM 垃圾回收(下)
Java 虚拟机的堆划分 Java 虚拟机将堆划分为新生代和老年代.其中新生代又被划分为 Eden 区,以及两个大小相同的 Survivor 区. 默认情况下,Java 虚拟机采取一种动态分配的策略, ...