Хотите вызвать функцию, если iframe не загружается или не загружается?
у меня есть iframe
в моей странице. Если iframe
Не загружается, хочу, чтобы это alert
сообщением "pdf не найден" а если iframe
загружается, он должен alert
" pdf открыт".
кто-нибудь знает, как этого добиться?
2 ответов
Итак, идея состоит в том, чтобы использовать Ajax-запрос для "тестирования" URL. Ajax-запросы позволяют привязать обработчики" успех "и" ошибка " - в отличие от <iframe>
элементы, которые предоставляют только обработчик" load".
конечно, 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-запрос запускает событие "success", мы назначаем обработчик" load "нашему элементу IFRAME (этот обработчик" load "в конечном итоге предупредит" загруженное " сообщение) и устанавливаем URL-адрес его src
свойства вручную.
вы можете просто добавить этот код в свой iframe, когда он загружен:
<script type="text/javascript">
<!--
window.top.window.callback();
//-->
</script>
и на верхней странице:
<script type="text/javascript">
<!--
function callback() {
alert("File loaded!");
}
//-->
</script>
если ваша функция обратного вызова не вызывается через 30 секунд, вы можете сказать, что ваш pdf не загружен.
изменить : Ваш первый файл (с кадра) :
<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']