如何检测链接是不是有效?

Posted

技术标签:

【中文标题】如何检测链接是不是有效?【英文标题】:How to detect if a link works?如何检测链接是否有效? 【发布时间】:2014-01-18 04:03:03 【问题描述】:

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

【问题讨论】:

对话在这里***.com/questions/13044805/… 【参考方案1】:

请参阅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>

【讨论】:

如果我无法完成我的想法,这可能很有用,但我真正想做的是确定链接是否会启动应用程序(AKA应用程序是否已安装)在用户点击链接之前。我在想在页面加载时执行一些 javascript 可能适用于此。有什么想法吗?我希望我已经足够清楚了...... 没有询问链接是否有效的界面……您只能尝试并处理结果(不幸的是)。您可以在 bugreport.apple.com 上提交 Mobile Safari 增强请求,但我想这会引发许多隐私问题,这就是 Apple 不允许这样做的原因。 这个解决方案能防止超时弹出吗?如果是,那么它就是正确的解决方案。 嗨 Aaron,我刚刚尝试了 JSFiddle 中的代码,但它似乎没有做任何事情。我做错什么了吗? jsfiddle.net/erea/5APKE/2 即使安装了 Google 地图应用程序,它也会重定向到 fail 网址。两者兼而有之。【参考方案2】:

解决方案是将带有 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 上打开 twitter 应用程序(如果已安装)。

【讨论】:

这比我的回答要好。我更新了我的答案以链接到这个。【参考方案3】:

没有办法让您知道链接是否有效,但 Safari 有一个名为 Smart App Banners 的东西

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

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

</html>

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

这样做的缺点是它只能在 Safari 上运行,但总比没有好。

【讨论】:

以上是关于如何检测链接是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章

js检测判断链接是不是有效

用Js判断输入的时间是不是有效

如何批量判断excel里面链接的有效性(是不是可以打开)?

js检测链接(URL)是否有效

java中emq怎么检测是不是存活

检测链接是不是为可下载文件