Подтвердить что ты не робот

Используя javascript, чтобы определить, существует ли url перед отображением в iframe

Я использую javascript для передачи динамического url в iframe src. но иногда url не существует, как я мог заранее обнаружить несуществующий url, чтобы я мог скрыть iframe с ошибкой 404.

4b9b3361

Ответ 1

Из-за моей низкой репутации я не мог комментировать ответ Derek 朕 會 功夫. Я пробовал этот код так, как он есть, и это не сработало. Существует три вопроса о коде Derek 朕 會..

  • Во-первых, время для асинхронного отправки запроса и изменения его свойства "статус" выполняется медленнее, чем выполнение следующего выражения - if (request.status === "404" ). Таким образом, request.status, в конечном счете, из-за интернет-диапазона, останется в состоянии 0 (ноль), и он не достигнет кода справа внизу, если. Исправить это легко: измените "true" на "false" при открытии метода запроса ajax. Это приведет к кратковременному (или не очень) блоку вашего кода (из-за синхронного вызова), но изменит статус запроса до того, как он дойдет до теста, если.

  • Во-вторых, статус является целым числом. Используя оператор сравнения === 'javascript, который вы пытаетесь сравнить, если левый объект идентичен объекту с правой стороны. Для выполнения этой работы существует два способа:

    • Удалите кавычки, которые окружают 404, делая его целым числом;
    • Используйте javascript-оператор '==', поэтому вы будете тестировать, если оба объекта похожи.
  • В-третьих, объект XMLHttpRequest работает только на более новых браузерах (Firefox, Chrome и IE7 +). Если вы хотите, чтобы этот фрагмент работал на всех браузерах, вы должны сделать так, как это предлагает W3Schools: 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.");
}

Ответ 2

Использовать 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();

Но заметьте, что он будет работать только по одному и тому же происхождению. Для другого хоста вам придется использовать серверный язык, чтобы это сделать, и вам придется разобраться в этом сами.

Ответ 3

Вы можете попробовать и сделать просто GET на странице, если вы получите 200 обратно, это означает, что страница существует. Попробуйте это (используя jQuery), функция - это функция обратного вызова успеха при успешной загрузке страницы. Обратите внимание, что это будет работать только на сайтах вашего домена, чтобы предотвратить XSS. Другие домены должны обрабатываться на стороне сервера.

$.get(
   yourURL,
   function(data, textStatus, jqXHR) {
      //load the iframe here...
   }
);

Ответ 4

Вы можете проверить URL-адрес через AJAX и прочитать код состояния - то есть, если URL-адрес находится в одном домене.

Если это удаленный домен, вы можете иметь сервер script в своем собственном домене проверить удаленный URL-адрес.

Ответ 5

Я нашел, что это сработало в моем сценарии.

Методы обратного вызова jqXHR.success(), jqXHR.error() и jqXHR.complete(), введенные в jQuery 1.5, устарели из jQuery 1.8. Чтобы подготовить код для их возможного удаления, используйте вместо него jqXHR.done(), jqXHR.fail() и jqXHR.always().

$.get("urlToCheck.com").done(function () {
  alert("success");
}).fail(function () {
   alert("failed.");
});