Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Проверка на существование файла по URL


Автор: zmxncb 6.3.2010, 23:11
Привет всем !
Хотел организовать трансляцию веб-камеры на сайте (http://server.ru/web/image.jpg). Для этого нашел модуль обновления картинки без обновления страницы, но проблема в том, что нужно проверить наличие этой картинки перед обновлением (бывает при ее обновлении, ее нет на сервере и тогда выдается пустота).
Проверка должна быть как я понимаю в файле в конце. Но как правильно написать, не знаю....
Может кто помочь ?
Заранее спасибо smile

файл "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 smile
условие существования файла по ссылке д/б как я понимаю в первом файле и выглядеть типа того:


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
Цитата(bars80080 @ 7.3.2010,  10:10)
может быть, устроить загрузку и проверочную функцию на onload картинки. в проверке выяснить размеры, если вернёт 0, значит не картинка, тогда скрыть или не показывать её

а как это должно выглядеть в коде ? smile
по-моему это все-таки маленько не то.
картинка обновляется например 1 раз в секунду, и надо выставить проверку на существование картинки перед выводом (в исходном коде проверки нет и изображение с web-камеры получается с разрывом(пустой экран), т.к. периодически картинки на сервере нет, т.к. она не успела появиться в ходе скидывания изображения с камеры программой)

Автор: mxt 7.3.2010, 21:56
что должно показываться если нету картинки?

Автор: zmxncb 8.3.2010, 07:36
Цитата(mxt @ 7.3.2010,  21:56)
что должно показываться если нету картинки?

Если нет картинки, функция обновления не должна срабатывать, т.е. должна остаться на экране предыдущая картинка.

Автор: mxt 8.3.2010, 10:56
тогда так:  2 картинки, 1 видно другую не видно.  и просто в них по очередно менять src.  и если картинка загрузилась, то её показывать, а другую скрывать. потом в ней менять src

Автор: zmxncb 8.3.2010, 13:02
Цитата(mxt @ 8.3.2010,  10:56)
тогда так:  2 картинки, 1 видно другую не видно.  и просто в них по очередно менять src.  и если картинка загрузилась, то её показывать, а другую скрывать. потом в ней менять src

Только бы еще узнать как это реализовать. Я пока что чайник в javascript  smile 

Автор: mxt 8.3.2010, 13:28
ставишь картинкам отлова события load (onload). 
 а затем меняй свойство src у той картинки что скрыта (в начале они обе будут скрыты)
и по событию load смотришь: загрузилась ли картинка:
  если да, то показываем её, перед этим спрятав старую.  затем ставим таймер на 1 секунду, который сменит src у другой картинки.
 если нет, то ставишь таймер на 1 секунду, который сменит src у картинки которая не загрузилась.

 и так по  кругу.

Автор: zmxncb 9.3.2010, 07:59
Спасибо! Буду пробовать  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)