2014-01-18 8 views

答えて

9

より堅牢なソリューションについては、Maximilian Hoffmann's answerを参照してください。


このようなアプローチは一般的です。タイムアウトを乗り越えて別のURLにリダイレクトします。このアプローチはあなたのために働くでしょうか?

<a id="applink" href="comgooglemaps://?q=Red+Lobster+Billings">Show map</a> 

<script type="text/javascript"> 

var backup = "http://maps.google.com/?q=Red+Lobster+Billings"; 

function applink(fail){ 
    return function() { 
     var clickedAt = +new Date; 
     setTimeout(function(){ 
      if (+new Date - clickedAt < 2000){ 
       window.location = fail; 
      } 
     }, 500);  
    }; 
} 

document.getElementById("applink").onclick = applink(backup); 

</script> 
+0

これは私が思っていることを達成できない場合はおそらく役に立ちますが、私が本当にやりたいことは、リンクがユーザーの前にアプリをインストールするかどうかを判断することですリンク上のタップ。私はおそらくこれのために働くことができるページの負荷でいくつかのjavascriptを実行すると思っています。何かご意見は?私は十分に明確であることを願っています... – novicePrgrmr

+0

リンクが機能するかどうかを尋ねるためのインターフェイスはありません。あなたはそれを試して、結果として何が起こるか(残念ながら)しかできません。あなたはbugreport.apple.comでMobile Safari拡張リクエストを提出することができますが、これはAppleが許可していない多くのプライバシー問題にまで扉を開くだろうと思います。 –

+0

このソリューションは、タイムアウトが発生しないようにしますか?そうであれば、それは正しい解決策です。 – novicePrgrmr

0

リンクが機能するかどうかを知るための方法はありませんが、それは基本的にかどうかをチェックされない何Smart App Banners

enter image description here

<!DOCTYPE html> 
<html> 
<head> 
<meta name="Google Maps" content="app-id=585027354"/> 
</head> 

<body> 
The content of the document...... 
</body> 

</html> 

と呼ばれるものでサファリのためにそこにありますアプリがインストールされています。インストールされていない場合、ユーザーはApp Storeに誘導されます。インストールされている場合、ユーザーは通常、URLスキームを使用して渡される関連データとともにウェブサイトからアプリを開くことができます。 Googleマップの場合はifを使用できます。

これは、Safariでしか動作しませんが、それでも何も改善していない点です。

4

解決策は、URLスキームを使用してページにiframeを追加しています。アプリがインストールされていないと暗黙のうちに失敗するので、アプリを起動するかどうかをタイマーで確認する必要があります。

// detect iOS 
if (['iPhone', 'iPad'].indexOf(navigator.platform) > -1) { 

    // create iframe with an Apple URL scheme 
    var iframe = document.createElement('iframe'); 
    iframe.src = 'twitter://'; 

    // hide iframe visually 
    iframe.width = 0; 
    iframe.height = 0; 
    iframe.frameBorder = 0; 

    // get timestamp before trying to open the app 
    var beforeSwitch = Date.now(); 

    // schedule check if app was opened 
    setTimeout(function() { 
    // if this is called after less than 30ms 
    if (Date.now() - beforeSwitch < 30) { 

     // do something as a fallback 

    } 
    }); 

    // add iframe to trigger opening the app 
    document.body.appendChild(iframe); 
    // directly remove it again 
    iframe.parentNode.removeChild(iframe); 
} 

私がインストールされている場合はiOSのTwitterアプリを開くには、このアプローチを使用することpost with a more detailed exampleを書きました。

+0

これは私の答えよりも優れています。私はこれにリンクするために私の答えを更新しました。 –

関連する問題