iOS 9 Safari対応アプリケーションジャンプスキームの探索


多くのウェブ開発をしている人は、リンクやボタンをクリックするときに、アプリケーションがインストールされている場合は、そのアプリケーションで開く必要があります.インストールされていない場合は、iOSジャンプApp Storeでダウンロードし、Androidで直接apkパッケージをダウンロードします.
日報を読むとき、これに長い時間を費やした.しかしiOS 9が発表された後、案はまた失効し、私を何時間も振り回した.
まず科学普及をして、ブラウザはアプリケーションがインストールされているかどうか分かりません.
アプリケーションは、1つ(または複数)のカスタムURL schemeを自分で開くことができるように設定することができます.例えば、Twitterは「twitter://」を開くことができると宣言します.
iOSアプリケーションではUIApplicationのcanOpenUrlメソッドで対応するURLが開くかどうかを検出できます.「twitter://」がオンになれば、Twitterアプリがインストールされていることになります.UIApplicationのopenURLメソッドで、対応するアプリケーションにジャンプできます.Androidでも似たようなやり方です.
次にブラウザがどのように処理すべきかを見てみましょう.
iOS 8以降のバージョンでは、SafariはカスタムURL schemeを開こうとすると、自動的に対応するアプリケーションで開きます.
開くには2つの方法があります.
  • 直接ジャンプ:例えばリンクをクリックし、windowを変更する.locationなど.
  • iframeジャンプ:bodyにiframeを追加し、そのsrcをジャンプするアドレスに指定します.

  • 次の方法では、ページの内容が新しいページになるなど、ページが表示される変化は起こりません.ブラウザの履歴の変化は起こりません.
      <a href="    ">      app</a>
    <script>
    $('a').click(function() {
    	var ifr = document.createElement('iframe');
    	ifr.src = '    URL scheme';
    	ifr.style.display = 'none';
    	document.body.appendChild(ifr);
    	setTimeout(function(){
    		document.body.removeChild(ifr);
    	}, 3000);
    });
    </script>
    a , URL scheme。 , ; , href , 。

    WebView , , :
      $('a').click(function() {
    	location.href = '    URL scheme';
    	t = Date.now();
    	setTimeout(function(){
    		if (Date.now() - t < 1100) {
    			location.href = 'Android     ';
    		}
    	}, 1000);
    	return false;
    }
    URL scheme, ( href )。 , , 1100 , app ( app ), ; 1100 , , 。

    iOS 9 ,iframe , 。
    Android , URL scheme , , xx 。 , , App Store。

    , URL scheme , , , , :
      $('a').click(function() {
    	location.href = '    URL scheme';
    	location.href = '   ';
    	location.reload();
    }
    , HTML , JavaScript 2 App Store。 HTTP Location App Store, App Store, 。

    , ; , App Store 。

      $('a').click(function() {
    	location.href = '    URL scheme';
    	setTimeout(function() {
    		location.href = '   ';
    	}, 250);
    	setTimeout(function() {
    		location.reload();
    	}, 1000);
    }
    , , 。 , 。 ,reload App Store 。

    , , Safari , 。 :
      setTimeout(function() {history.back()}, 2000);
    2 , , 。

    ,iOS 9 http scheme, , 。