使用JavaScript来检测显示在iframe之前的url是否存在
我正在使用JavaScript来传递一个dynamic的URL到iframe src。 但有时url不存在,我怎么可能检测到不存在的URL预先,所以我可以隐藏与404错误的iframe。
由于我的名誉低,我不能评论德里克朕会功夫的答案。 我已经试过这个代码,它不能正常工作。 Derek朕会功夫的代码有三个问题。
-
首先是asynchronous发送请求和更改其属性“状态”的时间比执行下一个expression式要慢 – if(request.status ===“404”)。 所以request.status最终将由于互联网频段而保持在状态0(零),并且在下面的代码将不会实现。 要解决这个问题很简单:在ajax请求的方法打开时将“true”更改为“false”。 这将导致代码(由于同步调用)的一个简短的(或不是这样)块,但会改变请求的状态,在达到testing之前,如果。
-
第二个是状态是一个整数。 使用'==='javascript比较运算符,您正试图比较左侧对象是否与右侧对象相同。 为了使这项工作有两种方法:
- 删除围绕404的引号,使其成为一个整数;
- 使用javascript的运算符'==',这样您将testing两个对象是否相似。
-
第三个是对象XMLHttpRequest只适用于较新的浏览器(Firefox,Chrome和IE7 +)。 如果你想要这个片段在所有浏览器上工作,你必须按照W3School的build议: w3schools ajax
真正为我工作的代码是:
var request; if(window.XMLHttpRequest) request = new XMLHttpRequest(); else request = new ActiveXObject("Microsoft.XMLHTTP"); request.open('GET', 'http://www.mozilla.org', false); request.send(); // there will be a 'pause' here until the response to come. // the object request will be actually modified if (request.status === 404) { alert("The page you are trying to reach is not available."); }
使用XHR,看看它是否响应你404。
var request = new XMLHttpRequest(); request.open('GET', 'http://www.mozilla.org', true); request.onreadystatechange = function(){ if (request.readyState === 4){ if (request.status === 404) { alert("Oh no, it does not exist!"); } } }; request.send();
但请注意,它只会在同一个来源工作。 对于另一台主机,您将不得不使用服务器端语言来做到这一点,您必须自己弄清楚。
你可以尝试在页面上做一个简单的GET,如果你得到一个200回它意味着页面存在。 试试这个(使用jQuery),该函数是成功的页面加载成功callback函数。 请注意,这只会在您的网域内的网站上运作,以阻止XSS。 其他域将不得不被处理服务器端
$.get( yourURL, function(data, textStatus, jqXHR) { //load the iframe here... } );
您可以通过AJAXtestingurl,并阅读状态代码 – 也就是说,如果URL在同一个域中。
如果它是远程域,您可以在自己的域上有一个服务器脚本检出一个远程URL。
我发现这在我的情况。
jQuery 1.5中引入的jqXHR.success(),jqXHR.error()和jqXHR.complete()callback方法从jQuery 1.8开始不推荐使用。 要准备好代码以便最终删除它们,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。
$.get("urlToCheck.com").done(function () { alert("success"); }).fail(function () { alert("failed."); });