Я использую javascript для передачи динамического url в iframe src. но иногда url не существует, как я мог заранее обнаружить несуществующий url, чтобы я мог скрыть iframe с ошибкой 404.
Используя javascript, чтобы определить, существует ли url перед отображением в iframe
Ответ 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.");
});