今天做了一个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. g++编译器的使用(转载)

    关于g++ g++  是GNU组织开发出的编译器软件集合(GCC)下的一个C++编译器.它是Unix 和 Linux  系统下标配的 基于命令行的 C++编译器.如果你的系统是Windows,可以按照 ...

  2. LyaoutParameters作用

    当你想要动态生成布局的时候,那么就要用到这个参数了.因为那时候你在布局文件里面写的width和height都不起作用了. LinearLayout linearLayout = (LinearLayo ...

  3. ZeroClipboard_copy

    //<script src="js/ZeroClipboard.js" type="text/javascript"></script> ...

  4. OpenStack之Glance源码简析

    Glance简介 OpenStack镜像服务器是一套虚拟机镜像发现.注册.检索. glance架构图: Glance源码结构: glance/api:主要负责接收响应镜像管理命令的Restful请求, ...

  5. 2018安恒杯11月月赛 MISC

    题目放评论了 Numeric password 这次隐写没有按照套路出牌,很强. 记录一下 看来自主学习的能力很有待提高. 打开Numeric password.txt 中华文化博大精深,近日在教小外 ...

  6. [错误解决]ubuntu 不在 sudoers 文件中。此事将被报告。

    跟据报错判断,ubuntu没有sudo权限,经过查询需要将ubuntu账户加入/etc/sudoers中 先切换到root权限 su 输入密码 修改/etc/sudoers配置 vim /etc/su ...

  7. Unity --yield return

    1.yield return null; //暂停协同程序,下一帧再继续往下执行 yield new WaitForFixedUpdate (); //暂停协同程序,等到下一次调用FixedUpdat ...

  8. poj3414 Pots (BFS)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12198   Accepted: 5147   Special J ...

  9. Vue - methods 方法

    一.methods中参数的传递 使用方法和正常的javascript传递参数的方法一样,分为两部: 1.在methods的方法中进行声明,比如我们给add方法加上一个num参数,就要写出add:fun ...

  10. Puppet单机实战之Nginx代理Tomcat

    author:JevonWei 版权声明:原创作品 blog:http://119.23.52.191/ --- 构建实战之Nginx代理Tomcat [root@node1 modules]# mk ...