仅当URL与JavaScript一起存在时才导航到该URL

仅当URL与JavaScript一起存在时才导航到该URL,javascript,Javascript,我正在尝试让我的网页导航到提供的URL。如果URL不存在,我希望我的页面重定向到其他URL。我需要用JavaScript来做这件事 这就是我迄今为止所尝试的: var customUrl = 'http://www.StackOverflow.com/ThisPageWillResultIn404'; var alternateUrl = 'AlternateUrl.html?e=PageIs404' setTimeout(function() { window.location=alt

我正在尝试让我的网页导航到提供的URL。如果URL不存在,我希望我的页面重定向到其他URL。我需要用JavaScript来做这件事

这就是我迄今为止所尝试的:

var customUrl    = 'http://www.StackOverflow.com/ThisPageWillResultIn404';
var alternateUrl = 'AlternateUrl.html?e=PageIs404'

setTimeout(function() { window.location=alternateUrl; }, 25);
window.location = customUrl;
这在IOS中似乎很好,但在Android中却不行。

为什么Javascript不能做到这一点- 如果您跨域(而不是从站点域)发出请求,则请求将失败。这是因为主流浏览器中强制实施了名为“”的安全策略,以防止出现错误。同一来源政策维基百科页面中列出的表格很好地描述了哪些是跨域的,哪些不是

总之,客户端脚本不能也不应该能够访问被同一来源策略视为跨域的站点

这意味着Javascript将无法满足您的要求,因为它无法确定用户提供的链接,除非这些链接指向您自己的站点

这在IOS中似乎很好,但在Android中却不行

虽然这在任何设备上都不可能实现,但您当前的方法很可能有效,因为不存在的页面可能会导致设备的浏览器在尝试加载不存在的页面时挂起。当它仍然停留时,超时中的代码将运行并重定向。虽然这很聪明,但它依赖于几个假设:

  • 当遇到不存在的页面时,浏览器将停留
  • 浏览器将停留超过25毫秒
  • 那么这些假设有什么问题吗?

  • 你不能假设所有的浏览器都会停留。这也许可以解释为什么Android设备似乎不适合你。如果负责调用链接的服务器被配置为返回404页面,那么页面将正常加载,而脚本不知道链接实际上并不存在。例如,不存在,但仍然返回404页

  • 页面加载所需的时间长度还取决于一些因素,如连接速度、浏览器、页面对不回复请求的超时/容差,等等。在慢速连接上使用您的站点的客户端可能无法访问任何站点,因为加载这些站点所需的时间超过25毫秒,而使用快速连接和特定浏览器的用户可能会遇到所有页面加载速度超过25毫秒的情况,从而阻碍系统的运行

  • 什么能做到这一点? 这个问题的正确解决方案需要在服务器端执行一些操作。服务器端语言可以访问跨域链接并确定页面是否存在。Stackoverflow用户演示了如何使用以下PHP代码段()完成此操作:

    然后,可以使用Javascript与ajax的调用向脚本发送参数,然后获得响应。显然,为了包含参数和返回值,必须对上面的PHP脚本进行一些小的调整

    幸运的是,Yahoo提供了一个由YQL驱动的API,他们将该服务描述为:

    通过一个简单的 语言。无需学习如何调用不同的API

    另一个寻找类似解决方案()的用户从Stackoverflow用户那里得到了答案,该用户利用Yahoo API提供了以下解决方案:

    基本上,Yahoo将在服务器端生成请求,并允许您获得结果,而无需您自己在服务器端编写任何内容。这太棒了!这个特定的示例使用jQuery,但是,它可以在普通Javascript中完成

    我已经写了一篇JS文章,介绍了这个特别的方法,它似乎很有效。请查看:


    链接中提供的所有解决方案可能重复,这使得ajax请求/xmlhttp请求在同一域中运行良好。跨域将无法使用它。请帮助我解决跨域问题。我已经发布了一个答案,我相信它正确地回答了您的问题,并提供了一个简单的解决方案。嗨,Xander。我尝试使用雅虎API。访问时我遇到以下错误。“*%20来自%20html%20其中%20url%3D%22money2%3A%2F%2FdomainName%2FUSMHC%2FHCP%2Fsignon%2Fsignon.action%22&format=json'&callback=jQuery18001189268296584487_138782433692&&u7782433722”jquery正在阻止我的网页,说它运行了不安全的内容。请帮助您的网站是否通过SSL运行(您的网站的URL是否以https://开头)?尝试将请求的URL更改为Yahoo API以使用https(将其从
    http://query.yahooapis.com/v1/publ...
    https://query.yahooapis.com/v1/publ...
    )。
    $file = 'http://www.domain.com/somefile.jpg';
    $file_headers = @get_headers($file);
    if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
        $exists = false;
    }
    else {
        $exists = true;
    }
    
    function isUrlExists(url)
    {
        $.getJSON("http://query.yahooapis.com/v1/public/yql?"+
          "q=select%20*%20from%20html%20where%20url%3D%22"+
          encodeURIComponent(url)+"%22&format=json'&callback=?", function(data){
              if(data.results[0]){
                  alert('Exists');
              }
              else{
                  alert('Doesn\'t exist');  
              }        
          }
        );
    }
    isUrlExists('http://google.com');