У меня есть iframe
на моей странице. Если iframe
не загружается, нужно, чтобы alert
отображалось сообщение "pdf не найден", а если iframe
загружается, должно alert
"pdf открыт".
Кто-нибудь знает, как этого добиться?
У меня есть iframe
на моей странице. Если iframe
не загружается, нужно, чтобы alert
отображалось сообщение "pdf не найден", а если iframe
загружается, должно alert
"pdf открыт".
Кто-нибудь знает, как этого добиться?
Итак, идея состоит в том, чтобы использовать Ajax-запрос для «проверки» URL. Ajax-запросы позволяют связать обработчики "успеха" и "ошибки" - в отличие от элементов <iframe>
, которые предоставляют только обработчик "загрузки".
Конечно, Ajax-запросы ограничены той же политикой происхождения (если веб-сервер не включает CORS), но вы указали, что PDF-файл находится в том же домене, поэтому проблем быть не должно.
Кроме того, вы заявили, что используете библиотеку Mootools — я использую jQuery, поэтому я могу предоставить вам только решение jQuery, но поскольку мы делаем простой Ajax-запрос с обработчиками «успеха» и «ошибки», вы должны быть возможность легко воссоздать решение Mootools на основе моего решения jQuery.
Итак, учитывая iframe и URL:
var iframe = $( '#iframe' )[0]; // reference to IFRAME element
var url = 'files/document1.pdf';
Ajax-запрос:
$.get( url, function () {
iframe.onload = function () { alert( 'PDF opened!' ); };
iframe.src = url;
}).error( function () { alert( 'PDF not found' ); });
Демонстрация успеха: http://jsfiddle.net/CZWdL/1/show/
Демонстрация ошибок: http://jsfiddle.net/CZWdL/2/show/< /а>
Таким образом, если Ajax-запрос вызывает событие «ошибка», мы просто немедленно сообщаем сообщение «Не найдено». Однако, если Ajax-запрос вызывает событие «успех», мы назначаем обработчик «загрузки» для нашего элемента IFRAME (этот обработчик «загрузки» в конечном итоге предупредит сообщение «Загружено») и устанавливаем URL-адрес в его свойство src
вручную.
Вы можете просто добавить этот код в свой iframe, когда он загружен:
<script type="text/javascript">
<!--
window.top.window.callback();
//-->
</script>
И на вашей главной странице:
<script type="text/javascript">
<!--
function callback() {
alert("File loaded!");
}
//-->
</script>
Если ваша функция обратного вызова не вызывается через 30 секунд, вы можете сказать, что ваш PDF-файл не загружен.
Изменить: ваш первый файл (с iframe):
<html>
<head>
<script type="text/javascript">
<!--
function callback() {
alert("This file doesn't exist");
}
//-->
</script>
</head>
<body>
<iframe src="load_pdf.php?f=test.pdf" style="width:900px;height:500px;"></iframe>
</body>
</html>
Второй (файл php):
<?php
$file = $_GET['f'];
if(is_file($file)) {
header('Content-type: application/pdf');
readfile($file);
}
else {
// This file doesn't exist
echo '
<script type="text/javascript">
<!--
window.top.window.callback();
//-->
</script>
';
}
?>
Не забудьте защитить $_GET['f']