今天做了一个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原生组件交互之遐想的更多相关文章

  1. WAP、触屏版网站及APP的区别

     1.电脑版网站: 电脑版网站是指用户通过台式或者笔记本电脑浏览器打开的网站,也就是我们平时上网所访问的网站.其支持和兼容IE6.IE7.IE8.IE9.IE10.Firefox.Chrome等各种主 ...

  2. 判断浏览器及设备的打开方式,自动跳转app中

    如果安装了APP则自动条状app,如果没安装则自动跳转下载页面 <head> 放在head中加载 <script> function redirect() { var appU ...

  3. 【WAP触屏】YouKu视频弹窗播放组件

    (function(window){ /* youku api : http://open.youku.com/tools 调用方法 : LM_youkuPop.open('XODI5Mzk3MDAw ...

  4. 转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)

    本文转载自CSDN的jzj1993,原文连接:http://blog.csdn.net/jzj1993/article/details/39158865 有时我们需要使用安卓实现在后台模拟系统按键,比 ...

  5. Bootstrap幻灯轮播如何支持触屏左右滑动手势?

    最近ytkah在学习用bootstrap搭建网站,Bootstrap能自适应pc端和手机端,并且移动设备优先,适合现如今移动营销.bootstrap是封装好的框架,需要某些功能只需调用相应的组件就可以 ...

  6. iOS 7 新版微信 URL 不支持跳转 App Store 的解决方案

    今天早上刚到公司,就收到反馈说公司前端页面的下载按钮在 iOS 7 的微信内置浏览器里面点击无效,经过确认之后,前端代码是正常的,问题出在了微信上,然后谷歌之,原来腾讯在***. 是 BUG 还是刻意 ...

  7. 点击页面判断是否安装app并打开,否则跳转app store的方法

    常常有这样的场景,咱们开发出来的APP需要进行推广,比如在页面顶部来一张大Banner图片,亦或一张二维码.但往往我们都是直接给推广图片加了一个下载链接(App Store中的).所以咱们来模拟一下用 ...

  8. 【JS】点击页面判断是否安装app并打开,否则跳转下载的方法

    应用场景 App产品在运营推广上有一个需求,就是要求可以让用户在访问我们的推广网页时,就可以判断出这个用户手机上是否安装了我们的App,如果安装了则可以直接在网页上打开,否则就引导用户前往下载.从而形 ...

  9. javascript如何判断访问网页的设备及是否支持触屏功能

    var system ={}; var p = navigator.platform; system.win = p.indexOf("Win") == 0; system.mac ...

随机推荐

  1. 各种友(e)善(xin)数论总集(未完待续),从入门到绝望

    目录 快速幂 扩展欧几里得 GCD 扩展欧几里得 同余系列 同余方程 同余方程组 一点想法 高次同余方程 BSGS exBSGS 线性筛素数 埃式筛 欧拉筛 欧拉函数 讲解 两道水题 法雷级数 可见点 ...

  2. kuangbin 最短路集合

    Til the Cows Come Home poj-2387 #include<iostream> #include<cstdio> #include<algorith ...

  3. 笔记-python-__new__()

    笔记-python-__new__() 1.       __new__() __new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前. 验证代码: class Person(obj ...

  4. Android拨打电话不弹出系统拨号界面总结

    我在网上搜了一下,解决这个问题,有两种方式: 1.反射调用系统底层方法,并获取系统权限 反射调用的代码如下: Class phoneFactoryClass = Class.forName(" ...

  5. HDU 4005 The war 双连通分量 缩点

    题意: 有一个边带权的无向图,敌人可以任意在图中加一条边,然后你可以选择删除任意一条边使得图不连通,费用为被删除的边的权值. 求敌人在最优的情况下,使图不连通的最小费用. 分析: 首先求出边双连通分量 ...

  6. 【ELK】ELK安装与配置

    一.ELK体系结构 二.系统环境变量 [主机信息] IP 主机名 操作系统版本 10.10.10.102 console CentOS7.5 10.10.10.103 log1 CentOS7.510 ...

  7. OpenStack之虚机热迁移

    OpenStack之虚机热迁移 最近要搞虚机的热迁移,所以也就看了看虚机迁移部分的内容.我的系统是CentOS6.5,此处为基于NFS共享平台的虚机迁移.有关NFS共享服务器的搭建可以看这里. Yak ...

  8. 设置CMD默认代码页为65001或936

    之前不知道怎么改的,CMD的代码页被默认设置成了65001   但我右击CMD标题,选择‘默认值’,显示默认却是936,但为何每次打开都是65001呢   上网找到设置默认值的方法 1 win键+R打 ...

  9. 【LoadRunner】利用lr_db_connect函数对Oracle数据库压测的完整流程

    项目中常常会有直接对数据库进行压测的需求,以前都是通过Jmeter实现的,但是Jmeter本身图表及结果收集方面没有Loadrunner那么强大,所以利用loadrunner工具自己的函数整理了一个脚 ...

  10. Chrome autocomplete="off"无效

    如果不希望输入框自动填充,可以设置 input 或 textarea 标签的属性 autocomplete="off". 但是有时 Chrome 会忽视 autocomplete ...