| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: для новичков > Проверка на существование файла по URL |
| Автор: zmxncb 6.3.2010, 23:11 |
| Привет всем ! Хотел организовать трансляцию веб-камеры на сайте (http://server.ru/web/image.jpg). Для этого нашел модуль обновления картинки без обновления страницы, но проблема в том, что нужно проверить наличие этой картинки перед обновлением (бывает при ее обновлении, ее нет на сервере и тогда выдается пустота). Проверка должна быть как я понимаю в файле в конце. Но как правильно написать, не знаю.... Может кто помочь ? Заранее спасибо файл "imagerefresh.js" _____________________________________________________________________________ // Imagerefresh class (Based in mootools of course) var imgrefresh = new Class({ Implements: [Options], initialize: function(options){ this.options=options; this.options.imagesrc=$(this.options.imageid).src; this.refresh.bind(this).periodical(this.options.countdown); }, refresh: function() { $(this.options.imageid).src=this.options.imagesrc+'?'+$time(); } }); _______________________________________________________________________________ файл "imagerefresh.php" _______________________________________________________________________________ <?php /** * @license GNU/GPL, see LICENSE.php * Joomla! is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * See COPYRIGHT.php for copyright notices and details. */ // Check to ensure this file is included in Joomla! defined( '_JEXEC' ) or die( 'Restricted access' ); class plgContentImageRefresh extends JPlugin { function plgContentImageRefresh( &$subject, $params ) { parent::__construct( $subject, $params ); } function onBeforeDisplayContent( &$article, &$params, $limitstart ) { global $mainframe; $plugin =& JPluginHelper::getPlugin('content', 'imagerefresh'); $pluginParams = new JParameter( $plugin->params ); $singleregex='/({imagerefresh\s*)(.*?)(})/i'; $regex='/{imagerefresh\s*.*?}/i'; $cnt=preg_match_all($regex, $article->text, $matches, PREG_OFFSET_CAPTURE | PREG_PATTERN_ORDER); if ($cnt>0) { // Add mootools JHTML::_('behavior.mootools'); // Add image class $doc =&JFactory::getDocument(); $doc->addScript(JURI::base().'plugins/content/imagerefresh.js'); } // Convert all plugins tags for($counter = 0; $counter < $cnt; $counter ++) { // Get default params $refreshtime = $pluginParams->get('refreshtime', 300000); $imagesin=$matches[0][$counter][0]; preg_match($singleregex, $imagesin, $imageparsed); $fields = explode("|", $imageparsed[2]); // for each option foreach($fields as $value) { $values=explode("=",$value, 2); $values=str_replace("'", '', $values); $values=str_replace("'",'',$values); // We can add more options switch ($values[0]) { case 'refreshtime': $refreshtime=$values[1]; break; case 'imagesrc': $imagesrc=$values[1]; break; case 'imageopt': $imageopt=$values[1]; break; } } $imgid=mt_rand('1', '9999999'); // Generate the refresh code $code.="<img id=\"img$imgid\" src=\"$imagesrc\" $imageopt />"; $code.=" <script language=\"Javascript\"> var img$imgid; window.addEvent('domready',function(){ img$imgid = new imgrefresh({ imageid: 'img$imgid', countdown: $refreshtime }); }); </script>"; $article->text = str_replace($imagesin, $code, $article->text); $code=''; } } } __________________________________________________________________________________ |
| Автор: bars80080 7.3.2010, 02:30 |
| ты знаешь, что у тебя в коде написан php? |
| Автор: zmxncb 7.3.2010, 09:44 |
| код второгофайла php я вложил чтобы было видно откуда вызывается скрипт java условие существования файла по ссылке д/б как я понимаю в первом файле и выглядеть типа того: refresh: function() { if (файл "http://server.ru/web/image.jpg" существует) { $(this.options.imageid).src=this.options.imagesrc+'?'+$time(); } } а как правильно создать такое условие не знаю :(( |
| Автор: bars80080 7.3.2010, 10:10 |
| может быть, устроить загрузку и проверочную функцию на onload картинки. в проверке выяснить размеры, если вернёт 0, значит не картинка, тогда скрыть или не показывать её |
| Автор: zmxncb 7.3.2010, 10:40 | ||
а как это должно выглядеть в коде ? по-моему это все-таки маленько не то. картинка обновляется например 1 раз в секунду, и надо выставить проверку на существование картинки перед выводом (в исходном коде проверки нет и изображение с web-камеры получается с разрывом(пустой экран), т.к. периодически картинки на сервере нет, т.к. она не успела появиться в ходе скидывания изображения с камеры программой) |
| Автор: mxt 7.3.2010, 21:56 |
| что должно показываться если нету картинки? |
| Автор: zmxncb 8.3.2010, 07:36 | ||
Если нет картинки, функция обновления не должна срабатывать, т.е. должна остаться на экране предыдущая картинка. |
| Автор: mxt 8.3.2010, 10:56 |
| тогда так: 2 картинки, 1 видно другую не видно. и просто в них по очередно менять src. и если картинка загрузилась, то её показывать, а другую скрывать. потом в ней менять src |
| Автор: zmxncb 8.3.2010, 13:02 | ||
Только бы еще узнать как это реализовать. Я пока что чайник в javascript |
| Автор: mxt 8.3.2010, 13:28 |
| ставишь картинкам отлова события load (onload). а затем меняй свойство src у той картинки что скрыта (в начале они обе будут скрыты) и по событию load смотришь: загрузилась ли картинка: если да, то показываем её, перед этим спрятав старую. затем ставим таймер на 1 секунду, который сменит src у другой картинки. если нет, то ставишь таймер на 1 секунду, который сменит src у картинки которая не загрузилась. и так по кругу. |
| Автор: zmxncb 9.3.2010, 07:59 |
| Спасибо! Буду пробовать |