亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > iOS > 正文

iOS中使用schema協(xié)議調(diào)用APP和使用iframe打開APP的例子

2019-10-21 18:57:54
字體:
供稿:網(wǎng)友
這篇文章主要介紹了iOS中使用schema協(xié)議調(diào)用APP和使用iframe打開APP的例子,用在瀏覽器中打開APP,需要的朋友可以參考下
 

在iOS中,需要調(diào)起一個app可以使用schema協(xié)議,這是iOS原生支持的,并且因為iOS系統(tǒng)中都不能使用自己的瀏覽器內(nèi)核,所以所有的瀏覽器都支持,這跟android生態(tài)不一樣,android是可以自己搞內(nèi)核的,但是iOS不行。

在iOS中提供了兩種在瀏覽器中打開APP的方法:Smart App Banner和schema協(xié)議。

Smart App Banner

即通過一個meta 標(biāo)簽,在標(biāo)簽上帶上app的信息,和打開后的行為,例如:app-id之類的,代碼形如:

復(fù)制代碼代碼如下:
<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">

具體可以看下開發(fā)文檔:https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html
今天Smart APP Banner不是我們的主角,我們說的是schema

 

使用schema URL來打開iOS APP

schema類似自定義url協(xié)議,我們可以通過自定義的協(xié)議來打開自己的應(yīng)用,形如:

復(fù)制代碼代碼如下:

myapplink://
# 例如 facebook的
fb://
# itunes的
itms-apps://
# 還有短信也是類似的
sms://

如果要打開一個app,最簡單的方式是通過一個鏈接,如我們在html中這樣寫:
復(fù)制代碼代碼如下:

<a href="myapplink://">打開我的app</a>

當(dāng)用戶點擊鏈接的時候就可以打開對應(yīng)的app。

 

綁定click事件

但是實際中我們更多的情況是綁定事件,比如做個彈層啥的,不能一味的用a標(biāo)簽啊,所以可以通過兩種方式來解決:location.href和iframe。

iframe的方式是開發(fā)中常用的,但是他也有一些問題:

1.我們沒很好的方式來判斷是否打開了app
2.會引起history變化
3.因為引起history變化,所以一些webview會有問題,比如:我查查,打開一個頁面,如果有iframe,選擇在safari中打開,實際打開的是iframe的頁面
4.如果頁面暴漏給了android系統(tǒng),那么也會出現(xiàn)頁面打不開,之類的問題
5.如果沒有app,調(diào)起不成功,ios的safari會自己彈出一個對話框:打不開網(wǎng)址之類的提示

所以現(xiàn)在的問題是:如何知道iframe已經(jīng)打開了某個app,即解決iframe打開app回調(diào)。

使用iframe在iOS系統(tǒng)中打開app

 

聰明的你可能想到了,iframe的onload事件啊,可是遺憾的說,無效!所以我們找到了定時器(setTimeout),通過一個定時器,如果在一段時間內(nèi)(比如500ms),當(dāng)點擊了按鈕(記錄time1),頁面沒有切走(調(diào)起app之后,頁面進程會被中斷),進程中斷,那么計時器也會中斷,這時候應(yīng)該不會觸發(fā)timer,如果調(diào)起失敗,那么timer會就觸發(fā),我們判斷下在一定時間內(nèi)如果頁面沒有被切走,就認為調(diào)起失敗。

另外通過timer觸發(fā)時候的timer2,做差,判斷是否太離譜了(切走了之后的時間應(yīng)該比timer實際定時的500ms要長):

復(fù)制代碼代碼如下:

function openIos(url, callback) {
    if (!url) {
        return;
    }
    var node = document.createElement('iframe');
    node.style.display = 'none';
    var body = document.body;
    var timer;
    var clear = function(evt, isTimeout) {
       (typeof callback==='function') &&  callback(isTimeout);
        if (!node) {
            return;
        }
        node.onload = null;
        body.removeChild(node);
        node = null;

 

    };
    var hide = function(e){
        clearTimeout(timer);
        clear(e, false);
    };
    node.onload = clear;
    node.src = url;
    body.appendChild(node);
    var now = +new Date();
    //如果事件失敗,則1秒設(shè)置為空
    timer = setTimeout(function(){
        var newTime = +new Date();
          if(now-newTime>600){
            //因為切走了,在切回來需要消耗時間
            //所以timer即使執(zhí)行了,但是兩者的時間差應(yīng)該跟500ms有較大的出入
            //但是實際并不是這樣的!
            clear(null, false);
          }else{
            clear(null, true);
          }
    }, 500);
}

 

看上去方法很靠譜,但是現(xiàn)實總是那么的殘酷!

不同的瀏覽器app(包括webview),都有自己在后臺的常駐時間,即:假如一個瀏覽器他在被切走之后,后臺常駐10s,那么我們設(shè)置定時器5s過期就是徒勞的,而且5s的定時器,用戶要空等5s!交互也不讓你這樣干啊!

最后我們想到了pageshow和pagehide事件,即如果瀏覽器被切走到了要打開的app,應(yīng)該會觸發(fā)瀏覽器的pagehide事件,而從app重新返回到瀏覽器,就會觸發(fā)pageshow方法。

但是經(jīng)過代碼測試發(fā)現(xiàn),在uc、chrome中,不會觸發(fā)pagehide和pageshow的方法,而在safari中可以的。

結(jié)論:

1.使用iframe調(diào)用schema URL
2.使用定時器判斷在一段時間內(nèi)是否調(diào)起成功
3.使用pageshow和pagehide來輔助定時器做更詳細的判斷
4.定時器中如果有alert可能不會被彈出,這一點很吃驚!后面的dom竟然5.執(zhí)行了,但是alert沒彈出,可能跟alert的實現(xiàn)有關(guān)系吧
6.在實驗中我使用了兩個定時器,是因為切回瀏覽器之后,有時候timeout觸發(fā)要在pagehide和pageshow之前
7.計算timer實際執(zhí)行時間差,也是不靠譜的

最后附上研究的代碼,算是比較靠譜的方法了,雖然還是有一定的失敗(第三方瀏覽器pagehide和pageshow不觸發(fā)):

復(fù)制代碼代碼如下:

<p><button id="btn">點我點我?。lert,不會彈出</button></p>
<p><button id="btn2">點我點我??!alert2,雖然有alert和info,info執(zhí)行,但是alert不彈出</button></p>
<p><button id="btninfo">點我點我?。nfo可以</button></p>

 

$(function(){

  var $info = $('#info');

  function info(msg){
    var p = $('<p>'+msg+'</p>');
    $info.append(p);
  }

  $('#btn').on('click', function(){
    openIos('baiduboxapp://', function(t){
      if(t){
        alert('timeout or no baidu APP');
      }else{
        alert('invoke success');
      }
    });
  });
  $('#btn2').on('click', function(){
    openIos('baiduboxapp://', function(t){
      if(t){
        info('timeout or no baidu APP2');
        alert('timeout or no baidu APP2');
      }else{
        info('invoke success2');
        alert('invoke success2');
      }
    });
  });
  $('#btninfo').on('click', function(){
    openIos('baiduboxapp://', function(t){
      if(t){
        info('timeout or no baidu APP');
      }else{
        info('invoke success');
      }
    });
  });

});

function openIos(url, callback) {
    if (!url) {
        return;
    }
    var node = document.createElement('iframe');
    node.style.display = 'none';
    var body = document.body;
    var timer;
    var clear = function(evt, isTimeout) {
       (typeof callback==='function') &&  callback(isTimeout);
        window.removeEventListener('pagehide', hide, true);
        window.removeEventListener('pageshow', hide, true);
        if (!node) {
            return;
        }

        node.onload = null;
        body.removeChild(node);
        node = null;

    };
    var hide = function(e){
        clearTimeout(timer);
        clear(e, false);
    };
    window.addEventListener('pagehide', hide, true);
    window.addEventListener('pageshow', hide, true);
    node.onload = clear;
    node.src = url;
    body.appendChild(node);
    var now = +new Date();
    //如果事件失敗,則1秒設(shè)置為空
    timer = setTimeout(function(){
        timer = setTimeout(function(){
          var newTime = +new Date();
          if(now-newTime>1300){
            clear(null, false);
          }else{
            clear(null, true);
          }

        }, 1200);
    }, 60);
}



注:相關(guān)教程知識閱讀請移步到IOS開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲欧美文学| 国产精品综合不卡av| av网站手机在线观看| 一区二区三区欧美久久| 日韩一二在线观看| 国产精品午夜电影| 色8久久久久| 国内外成人在线视频| 精品一区二区三区免费观看| 成人三级毛片| 日本一级片免费看| av丝袜天堂网| 亚洲人性生活视频| 欧美日韩视频精品一区二区| 国产欧美一区二区三区在线看蜜臀| 亚洲va欧美va国产综合剧情| 乱人伦中文视频在线| 欧美嫩在线观看| 波多野结衣久久精品| h网址在线观看| 欧美极品另类videosde| 日日躁夜夜躁aaaabbbb| 在线一区二区三区视频| 这里只有视频精品| 国产一区二区三区网站| 一区二区三区视频免费| 91在线视频| 亚洲国产精品久久久久蝴蝶传媒| 伊人久久久久久久久久久久| 精品国产青草久久久久96| 成人在线免费观看91| 欧美大胆a人体大胆做受| 337p日本欧洲亚洲大胆鲁鲁| 91se在线| 久久精品一偷一偷国产| 谁有免费的黄色网址| 97国产真实伦对白精彩视频8| 成人一级片网址| 韩国av电影在线观看| 男人的天堂一区二区| 欧美理论影院| 日本成人中文字幕| 国产成人免费视频网站高清观看视频| 99免在线观看免费视频高清| 欧美aaa免费| 99久久精品费精品国产| 国产精品66| 嫩草伊人久久精品少妇av杨幂| 欧美电影精品一区二区| 91久久精品国产91久久性色tv| 欧美另类videoxo高潮| 国产一区精品二区| 亚洲免费不卡视频| 国产成人亚洲精品播放器下载| 日韩xxxxxxxxx| 国产剧情演绎av| 97免费在线观看视频| 国产精品不卡一区二区三区| 欧美人善zozσ性伦交| 中文字幕一区在线观看视频| 伊人久久男人天堂| 亚洲精品第一国产综合精品| 中文字幕亚洲欧美日韩2019| 变态黄色小视频网站| 在线性视频日韩欧美| 国产美女免费看| 在线观看欧美日本| 热久久久久久久| 91精品入口| 久热久精久品这里在线观看| 米奇777超碰欧美日韩亚洲| 51调教丨国产调教视频| 中文字幕第24页| 国产一区二区三区黄片| 日韩电影免费在线观看| 国产91精品欧美| 在线亚洲男人天堂| 深夜免费福利视频| 久久99精品国产麻豆婷婷洗澡| 精品香蕉在线观看视频一| 黄色av电影在线观看| 99视频精品全部免费在线| 亚洲欧洲在线播放| 久久先锋影音av鲁色资源| 日韩在线观看免| 欧美一级淫片videoshd| 中文字幕第九页| 欧美日韩麻豆| 正在播放一区| avhd101老司机| 91女人18毛片水多国产| 亚洲国产视频一区| 欧美一区二区三区在线观看视频| 欧美猛烈性xbxbxbxb| 久久久久这里只有精品| 视频一区在线免费观看| 国产盗摄一区二区三区在线| 久久香蕉一区| 国产精品久久久久久久久毛片| 精品美女www爽爽爽视频| 欧美一区二区免费观在线| 波多野结衣的一区二区三区| 丰满少妇在线观看资源站| 国产精品对白| 精品一区二区三区的国产在线观看| 国产精品久久久久永久免费看| av中文字幕观看| 亚洲自拍偷拍二区| 亚洲v欧美v另类v综合v日韩v| 亚洲欧美自拍一区| 日韩国产高清在线| 色婷婷国产精品免| 欧美黄页在线免费观看| 欧美韩日一区二区三区四区| 无遮挡亚洲一区| 国产一级片黄色| 久久久久久久久免费视频| 日韩手机在线视频| 日本三级韩国三级欧美三级| 在线观看网站黄| 一本一道久久综合狠狠老精东影业| 每日更新成人在线视频| 国产日产精品久久久久久婷婷| 欧美专区在线视频| 日韩欧美在线观看一区二区三区| 亚洲综合精品视频| 中文字幕第24页| 中文字幕日本一区| 亚洲三级在线免费观看| 黑人巨大精品欧美一区免费视频| 天天做天天摸天天爽国产一区| 中文字幕资源网| 欧美videos粗暴高清性| 亚洲成人精品| 图片专区亚洲欧美另类| 欧美最大成人综合网| 久久一区二区三区超碰国产精品| 在线伊人免费视频| 亚洲精品一区二区三区四区| 成人的网站免费观看| 视频精品导航| 菠萝蜜视频国产在线播放| 很黄很a的视频| 久久无码精品丰满人妻| 天天干,天天操,天天射| 中文字幕日韩综合| 欧美激情视频在线免费观看 欧美视频免费一| 国产亚洲成人av| 久久综合亚洲精品| 色诱视频网站一区| 欧美亚洲不卡| 久久久蜜桃精品| 91精品国产色综合久久不卡98| 日韩精品伦理第一区| 亚洲色在线视频| 欧美国产视频一区| h在线观看视频| 樱花视频在线免费观看| 国产高清视频免费最新在线| 中文字幕一区二区在线观看| 色大师av一区二区三区| 国产精品国色综合久久| 五月婷婷狠狠操| 日韩福利在线播放| 中文字幕+乱码+中文字幕明步| 新呦u视频一区二区| 亚洲色图五月天| 韩国一区二区三区美女美女秀| 亚洲欧美久久久| 日本免费在线一区| 天堂资源av| 国产婷婷色综合av蜜臀av| 成人免费视频观看| 国产精品国产自产拍高清av王其| 老少交欧美另类| 午夜成人免费电影| 久久91精品国产91久久久| 米奇777四色精品人人爽| 成人综合网站| 午夜啪啪小视频| 国产三线在线| 国产精品探花视频| 国产精品免费看久久久香蕉| 欧美大片va欧美在线播放| 欧美黄视频在线观看| 五月婷婷丁香在线| 91超碰在线播放| 亚洲精品一区二区三区婷婷月| 亚洲国产资源| 亚洲免费毛片| 日韩中文字幕在线免费观看| 国产精品久久久久久免费观看| 亚洲精品小视频| 国产亚洲精品久久飘花| 午夜视频免费在线| 老头吃奶性行交视频| 久久免费国产| av网站在线观看免费| 国产精品嫩草影院俄罗斯| 欧美大黑帍在线播放| 在线观看精品视频看看播放| 国产精品美女久久久久久免费| 99精品在线观看视频| 国产精品视频免费在线观看| 0608新视觉| 亚洲精品永久免费精品| 国产美女99p| 99热精品在线播放| 欧美人在线视频| 亚洲三区在线观看无套内射| 精品福利一区二区| 51久久夜色精品国产麻豆| 国产女人18水真多18精品一级做| 国产亚洲色婷婷久久| 91亚洲精品久久久蜜桃| 国产精品v欧美精品v日本精品动漫| 日韩精品一区第一页| 性久久久久久| 一区二区三区四区国产| 澳门精品久久国产| 欧美日韩电影在线| 欧美mv日韩mv亚洲| 亚洲视频免费一区| 第一中文字幕在线| 精品少妇av| 99在线观看免费| 久久中国妇女中文字幕| 国产农村av| 亚洲欧美国产一区二区三区| 久久久国产精品一区| 亚洲乱妇老熟女爽到高潮的片| 欧美日韩亚洲天堂| 成人激情黄色小说| 色噜噜狠狠永久免费| 国产激情视频一区二区| 国产精品18久久久久网站| 欧美激情一区二区在线| 亚洲av无码成人精品国产| 亚洲美女黄网| 国产日韩欧美精品一区| 极品少妇xxxx精品少妇| 久久av免费观看| www成人免费观看网站| 快播日韩欧美| 爱情岛论坛亚洲入口| 中文天堂在线一区| 日韩一区二区三区在线观看视频| 99久久精品免费观看国产| 国产精品精品| 日本色护士高潮视频在线观看| 国产成人精品视频免费| 理论片鲁丝二区爱情网| 欧美人与物videos| 尤物视频免费观看| 中文字幕资源网在线观看| 亚洲黄色片网站| 欧洲一区二区三区精品| 一级二级黄色片| 免费一区二区在线观看| 成人免费毛片网| 欧美成人三级电影在线| a级片国产精品自在拍在线播放| 水莓100在线视频| 精品亚洲一区二区三区四区| 国产69精品久久久久777| 精品少妇人欧美激情在线观看| 欧美日韩一区三区| 欧美特级xxxxbbbb毛片| 伊人精品视频在线观看| av超碰免费在线| 女子免费在线观看视频www| 老师我好爽再深一点的视频| 一区二区三区日本视频| 国产色产综合产在线视频| 精品免费日韩av| 亚洲国产欧美日韩另类综合| 亚洲人被黑人高潮完整版| 国产欧美日韩不卡免费| 精品美女一区二区三区| 国产偷国产偷精品高清尤物| 一精品久久久| 全国精品久久少妇| 欧美高清一级大片| 大色综合视频网站在线播放| 国产亚洲精品久| 欧美啪啪精品| 2024短剧网剧在线观看| av毛片在线| 香蕉成人啪国产精品视频综合网| 五月天综合网| 欧美色图17p| 日日噜噜夜夜狠狠视频欧美人| 日本中文字幕观看| 国产高潮呻吟久久| 这里只有精品丝袜| 欧美精品国产精品久久久| 一区二区欧美久久| 久久综合伊人77777蜜臀| 色免费在线观看| 久久蜜桃av一区精品变态类天堂| 成人免费一区二区三区| 国产尤物一区二区| 日日夜夜精品视频天天综合网| 不卡一区二区三区四区| 久久精品女人毛片国产| 樱桃国产成人精品视频| 久久久久亚洲av成人无码电影| 一区二区三区欧美| 在线观看91精品国产入口| 日日夜夜精品视频免费观看| 人妻少妇精品视频一区二区三区| 亚洲男人天堂久| yourporn在线观看中文站| 日韩av高清在线观看| 一区二区三区欧美在线| 91久久精品国产91性色| 日本黄色免费网址| siro系绝美精品系列| 成人免费电影视频| 亚洲国产视频直播| 久久婷婷久久一区二区三区| 欧美成人黑人猛交| 在线手机福利影院| 亚洲女同志freevdieo| 麻豆成人入口| 人成在线免费视频| 亚洲一区二区视频在线| 国产精品久久久久久久久搜平片|