ele.me在IOS浏览器端启动APP的技巧分析

  1. 巧妙利用后台重定向,在schemes启动时提示用户打开,启动不了APP时能够及时跳转至下载页面。
  2. 避免报错页面的出现以及用户还没来的及选择就跳转到下载页面。
  3. 在没有universal link时,此种方法是一种很好的解决方案。

附上ele源码
<script type="text/javascript">
"use strict";
window.onload = function() {
//尝试schemes码打开app
location.href = "eleme://";
//判断andriod还是ios还是微信
var e = window.navigator.userAgent,
i = "",
n = (new UParams).from;
if(/iphone|iPad/i.test(e) && /micromessenger/i.test(e))
return void(location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=me.ele");
if(/Android/i.test(e) && /micromessenger/i.test(e))
return void document.write('\n <div class="wechat-warning">\n <img src="//static11.elemecdn.com/eleme/activities/dist/download/tip.0ccdda.png" alt="下载应用请点击右上角按钮选择[在浏览器中打开]">\n <div>下载应用请点击右上角按钮<br/>选择[在浏览器中打开]</div>\n </div>\n ');
if(!/iPhone|iPad/.test(navigator.userAgent))
return void(location.href = "//uxmgnt.ele.me/download/" + (n ? n : "eleme"));
//后台重定向处理(关键步骤)
i = "//uxmgnt.ele.me/download/eleme";
//ajax请求,怀疑是统计下载量
var o = new XMLHttpRequest; //
o.open("POST", location.origin.replace(/h\./, "mainsite-restapi.") + "/ugc/download/channels/ios"),
o.withCredentials = !0;
var t = {
source: n || "",
is_web: !0
};
o.onload = o.onerror = function() {
//触发后台重定向
i && (location.href = i)
},
o.send(JSON.stringify(t))
}; // withCredentials解惑
// 如果需要读取读取cookie:
// 需要配置参数:Access-Control-Allow-Credentials:true
// 同时在xhr发起请求的时候设置参数withCredentials为true:
// var xhr = new XMLHttpRequest(); ;
// xhr.open('GET', 'http: //b.com/cros/ajax.php', true);
// xhr.withCredentials = true;
// xhr.onload = function () {
// alert(xhr.response);//reposHTML;
// };
// xhr.onerror = function () {
// alert('error making the request.');
// };
// xhr.send();
// 如:Access-Control-Allow-Origin:http://a.com表示允许a.com下的域名跨域访问;
</script>

原文来至:http://www.cnblogs.com/chunlei36/articles/6287148.html

ele.me在IOS浏览器端启动APP的技巧分析的更多相关文章

  1. 【js】手机浏览器端唤起app,没有app就去下载app 的方法

    这种功能的作用: 1.一般公司有自己的app,而app是需要不断有新用户涌入才能持续运营,达到不错的收入.就需要使用这种方式进行引入新的用户. 2.一些内容在网页端体验不好,或者一些功能需要app内才 ...

  2. fiddler实现B/S端、APP抓包分析遇到的各种疑问

    阅读本文前您需要先下载fiddler并成功安装,并且要有一丢丢测试和接口基础或者在学习fidder时遇到了问题,或许本文可以帮助到你 一.B/S端抓包 Fiddler设置 1. 官网下载fiddler ...

  3. Netty之旅三:Netty服务端启动源码分析,一梭子带走!

    Netty服务端启动流程源码分析 前记 哈喽,自从上篇<Netty之旅二:口口相传的高性能Netty到底是什么?>后,迟迟两周才开启今天的Netty源码系列.源码分析的第一篇文章,下一篇我 ...

  4. Netty入门一:服务端应用搭建 & 启动过程源码分析

    最近周末也没啥事就学学Netty,同时打算写一些博客记录一下(写的过程理解更加深刻了) 本文主要从三个方法来呈现:Netty核心组件简介.Netty服务端创建.Netty启动过程源码分析 如果你对Ne ...

  5. Android在浏览器启动APP

    要想在浏览器启动APP的方法例如以下: 在须要跳转的ACTIVITY中加入intent-filter的相关信息: <intent-filter>     <data android: ...

  6. 浏览器通过Scheme协议启动APP中的页面

    在APP开发过程中,通过外部浏览器调起APP页面的场景也很普遍使用.下面就介绍一下通过外部H5页面唤起APP中页面的通用方法. 1.首先需要在AndroidMainifest.xml中对你要启动的那个 ...

  7. ios移动端浏览器点击事件失效的解决方案

    点击事件失效的原因可能是因为,你用了事件代理了, 比如这样 $(document).on("click",".fd",function(){ }) 这段代码在安 ...

  8. ios下微信浏览器如何唤醒app?app已上架应用宝

    android下可以通过在应用宝微下载地址后面加参数&android_schema='应用schema'来实现,ios下如何实现? ios下微信浏览器如何唤醒app?app已上架应用宝 > ...

  9. appium启动app(ios)

    Appium启动APP至少需要7个参数 ​ 'platformVersion','deviceName'.'udid'.'bundleId'.'platformName'.'automationNam ...

随机推荐

  1. vijos1004 博弈论

    一道挺简单的博弈论题 感觉自己也没有很规范的学过博弈论吧,就是偶尔刷到博弈论的题目,感受一下推导的过程,大概能领悟些什么 我们设2001.11.4必败,推上去,即2001.10.4和2001.11.3 ...

  2. 基本功能的shell

    手把手教你编写一个具有基本功能的shell(已开源) 刚接触Linux时,对shell总有种神秘感:在对shell的工作原理有所了解之后,便尝试着动手写一个shell.下面是一个从最简单的情况开始,一 ...

  3. [转] Building xnu for OS X 10.10 Yosemite

    Source:http://shantonu.blogspot.jp/2014/10/building-xnu-for-os-x-1010-yosemite.html The OS X kernel ...

  4. 关于UITextfield弹出键盘解决方案

    解决的问题:当你点击一个UITextfield时,不想让其弹出键盘,如果你觉得不就是取消其第一响应者嘛,resignRespond一下不就行了嘛,确实,如果你只是在其编辑完成后让其键盘消失,那这个就够 ...

  5. 苹果icloud邮箱抓取

    1 icloud登录,与其他网站登录区别  1.1 支持pop抓取的邮箱:pop提供统一接口,抓取简单:  1.2 没有前端js加密的邮箱(139,126,163):只要代码正确模拟登录流程,参数正确 ...

  6. socket网络编程快速上手(二)——细节问题(3)

    3.SIGPIPE问题 人怕牺牲,我们写的程序也一样,人有死不瞑目,程序又何尝不是?程序跑着跑着,突然就崩掉了.好一点的牺牲前告诉你些打印,差点的也能用core文件等一些手段查出死在哪了,最惨不忍睹的 ...

  7. 如何对软件开发工具 WebBuilder 进行安装?

    WebBuilder是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企业级应 ...

  8. 项目检出JRE问题(Unbound classpath container: 'JRE System Library [JavaSE-1.7]' in project 'idweb')

    分类: java 技术2014-07-31 16:51 9864人阅读 评论(13) 收藏 举报 项目从SVN检出到工作空间后报了很多错误,其中很明显就是一些jar的问题,没有相关的jar或版本问题, ...

  9. JS、JQuery和ExtJs动态创建DOM对象

    做了个简单使用JavaScript.JQuery.ExtJs进行DOM对象创建的测试,主要是使用JavaScript.JQuery.ExtJs动态创建Table对象.动态Table数据填充.多选控制. ...

  10. Spring.Net-创建对象

    1:通过构造函数创建对象    在配置文件中,指明对象类型<object id="" type="类型全名,程序集名" />    在代码中指定对象 ...