Как предварительно загрузить флэш-видео и изображения?

Я работаю над веб-приложением, которое проходит через "страницы" через ajax. Содержимое каждой страницы находится в файле xml, приложение ajax создает этот файл XML и создает из этого страницу, а затем выплевывает ее в браузер.

На некоторых из этих страниц есть видео или большие изображения, которые я пытаюсь предварительно загрузить на предыдущую страницу. Ниже приведен код, который я использую, чтобы проверить, предварительно ли загружен носитель, но когда я попадаю на страницу, кажется, что он загружается снова... есть идеи?

Видеоплеер всегда присутствует в домике, когда он не используется, я скрываю его за экраном.

Я предполагал, что использовать новый Image() и дать ему исходные кеширует это изображение слишком верно?

var l_image = new Image();
//other stuff happens here

switch(l_next.type) {
    case 'st_animation':
      if(l_next.video != undefined && l_next.video != '') {
        l_videoSrc = String(l_next.video);
        _videoPlayer.loadVideo(l_videoSrc);
        delete l_next;
      }
      //give 2secs for the video to load atleast the first frame
      setTimeout(p_callback, 2000);
      break;

    default:
      if(l_next.image != undefined && l_next.image != '') {
        l_imageSrc = 'files/'+ l_next.image;
        delete l_next;
        l_image.src = l_imageSrc;
        //replace the image or append it
        if(this.data.type == 'st_animation') {
          _$image.html('<img src="'+ l_imageSrc +'" alt="" />');
        }
        else {
          _$image.prepend('<img src="'+ l_imageSrc +'" alt="" />');
        }
        //trigger callback when loaded
        if(l_image.complete) {
          setTimeout(p_callback, 500);
        }
        else {
          l_image.onload = function() {
            setTimeout(p_callback, 500);
          }
        }
      }

и функция обратного вызова:

/*
 * Goes to the page with the specified id
 */
goTo : function(p_pageID) {
  //empty content & show loader
  _$content.empty();
  _currentPage = null; //empty the page data
  //_$loader.fadeIn(500);
  //get the page we're going to's data
  var l_data = this.getData(p_pageID);
  //instantiate this pages PageType sub-class
  eval('_currentPage = new '+ l_data.type +'(l_data)');
  l_data = null;
},


/**
 * Loads the xml of the page's id you pass it
 */
getData : function(p_pageID) {
  var l_cacheBuster = '?cacheBuster='+ _structure.course.settings.cache_buster,
      l_xmlPath = './data/'+ p_pageID +'.xml'+ l_cacheBuster,
      l_data = new Object();
  //ajax request
  $.ajax({
    type: 'GET',
    url: l_xmlPath,
    dataType: 'xml',
    async: false,
    success: function(p_data) {
      //convert the xml structure to json
      l_data = $.xml2json(p_data);
      //check for parsing error
      if(l_data.text != undefined) {
        var l_dataString = String(l_data);
        if(l_dataString.indexOf('XML Parsing Error') > -1) {
          trace(l_dataString);
        }
      }
    },
    error: function(p_response, p_status, p_error) {
      trace('Could not load "'+ l_xmlPath +"\"\r\n"+ p_status +': '+ p_error.name);
    }
  });
  return l_data;
}

Заранее спасибо...

1 ответ

Предварительная загрузка изображения - это решенная проблема, поэтому не нужно изобретать велосипед. Поскольку Flash контролирует видео, предварительная загрузка SWF должна выполняться с помощью ActionScript.

Рекомендации

Другие вопросы по тегам