2014-01-18 164 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

This如果我無法完成我所想的內容,可能會很有用,但我真正希望能夠做的是確定鏈接是否要在用戶之前啓動應用程序(AKA是否安裝該應用程序)點擊鏈接。我想在頁面加載執行一些JavaScript可能可以爲此工作。有什麼想法嗎?我希望我已經清楚了...... – novicePrgrmr

+0

沒有接口詢問鏈接是否可以工作......只能嘗試它並處理結果(不幸)。您可以在bugreport.apple.com上提交移動Safari增強請求,但我想這可能會打開許多​​隱私問題,這就是Apple不允許這樣做的原因。 –

+0

這個解決方案是否會阻止超時彈出?如果是,那麼這是正確的解決方案。 – novicePrgrmr

0

沒有讓你知道,如果一個鏈接將工作的方式,但有Safari瀏覽器利用所謂的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> 

什麼,它基本上是被檢查是否安裝了一個應用程序。如果未安裝,用戶將被引導至應用商店。如果已安裝,用戶將能夠使用通常使用url方案傳遞的相關數據從網站打開應用程序。 你可以使用如果谷歌地圖。

這樣做的缺點是它只能在Safari上工作,但它仍然比沒有好。

4

解決方案是在您的頁面上添加一個iframe的URL方案。如果應用程序未安裝,它會靜默失敗,因此如果打開應用程序,您需要通過計時器檢查是否工作。

// 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

這比我的答案要好。我更新了我的答案,以鏈接到這一個。 –