如何检测链接是否有效?

时间:2014-01-18 04:03:04

标签: hyperlink

我需要知道链接是否会打开。

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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);
}

我写了一个post with a more detailed example,使用这种方法在iOS上打开推特应用程序。

答案 2 :(得分: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>

它基本上做的是检查是否安装了应用程序。如果未安装,则会将用户定向到应用商店。如果已安装,用户将能够使用您通常使用网址方案传递的相关数据从网站打开应用程序。 您可以将if用于Google地图。

这方面的缺点是它只适用于Safari,但它仍然比没有好。