mootools.swiff: loaderInfo никогда не завершается - PullRequest
1 голос
/ 26 августа 2009

[EDIT 07-22-2010] удалил демы с моего сайта [/ EDIT] [EDIT 08-26-2009] добавил очень странную проблему в конец вопроса [/ EDIT] всем привет Я пытаюсь начать работу с mootools swift и, похоже, не получаю событие loaderInfo.COMPLETE во флэш-памяти. точнее, динамически загруженный SWF-файл никогда не загружается полностью, а статический - загружается. Вот соответствующий код моего класса документов во флэш-памяти (AS3).

используйте Firefox + Firebug, чтобы увидеть следы

package pt.classes{
    import flash.display.MovieClip
    import flash.display.LoaderInfo
    import flash.external.*
    import flash.events.Event
    import flash.events.ProgressEvent
    import flash.events.IOErrorEvent
    import flash.events.HTTPStatusEvent
    import pt.utils.myTrace
    import pt.testTrace
    import pt.classes.Episode

    public class Main extends MovieClip{
        include "../testTrace.as";//this is a trace() implementation that redirects traces to the firebug console
        public function Main(){
            trace ("constructor for "+ this);
            var l_this:Main = this;
            loaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
            loaderInfo.addEventListener(Event.INIT, function(_e:Event){trace("init for "+ l_this)});
            loaderInfo.addEventListener(Event.OPEN, function(_e:Event){trace("open for "+ l_this)});
            loaderInfo.addEventListener(ProgressEvent.PROGRESS, function(_e:ProgressEvent){trace("Progress for "+ l_this)});
            loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function(_e:IOErrorEvent){trace("IOError for "+ l_this)});
            loaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, function(_e:HTTPStatusEvent){trace("HTTPStatus for "+ l_this)});
            ExternalInterface.addCallback("trace", this.trace);
        }
        private var m_params:Object;
        /*! loaderComplete
         * called when the stage has finished loading
         * @param _e : an Event
         */
        private function loaderComplete (_e:Event){
            m_params = new Object;
            for (var i:String in loaderInfo.parameters){
                m_params[i] = loaderInfo.parameters[i];
            }
            trace("loader complete for " + this);
        }
    }
}

и когда я просто использую HTML, который мне предоставляет flash IDE, консоль firebug дает мне следующее:

конструктор для Main Pokertales

init для Main Pokertales

Прогресс для главных покерных сказок

полный загрузчик для MainPokertales

но, когда я использую swiff, как это (файл .js включен сразу после моего moo-core.js):

mySwiff = new Swiff("files/main.swf",{
  width:  200,
  height: 150,
  params: {
      wmode: 'opaque',
  },
  vars: {
      myVariableString: 'hello'
  },
  callBacks: {
    load: function() {
      alert("Flash is loaded!");
      console.log("flash is loaded");
      this.trace('hello from flash');
    },
    error: function(){console.log("error!")},
    start: function(){console.log("start!")}
  }
});
console.log(mySwiff);
window.addEvent('domready', function() {
  console.log('dom is ready');
  //document.newElement(mySwiff);/*
  var myCont;
  if (myCont = $('swiffcontainer')){
    mySwiff.inject(myCont,'top');
  };
  //console.log(myCont, mySwiff);
});

я получаю только два первых журнала (без прогресса, без завершения и без обратного вызова загрузки ...

Параметры объекта = экземпляр объекта = Swiff_1251130426079

Дом готов

конструктор для Main Pokertales

init для Main Pokertales

Итак, SWF создан, он загружает свой загрузчик, затем останавливается ... Кто-нибудь получил представление об этом?

Что я здесь не так делаю? О, и заранее спасибо за любую помощь:)

РЕДАКТИРОВАТЬ: как бы странно это ни казалось, swiff фактически полностью загружается и регистрирует весь путь до завершения загрузки, ЕСЛИ файл .swf был сгенерирован менее 10 секунд назад ... если я нажму "publish" во flash IDE а затем сразу же нажмите F5 в Firefox, я получаю этот журнал:

Параметры объекта = экземпляр объекта = Swiff_1251294375102

Дом готов конструктор для Main

Инициирование Pokertales для главных покерных сказок

Прогресс для главных покерных сказок

загрузчик завершен для Main Pokertales

      start = Swiff.CallBacks.Swiff_1251294375102.start

      myVariableString = hello

      error = Swiff.CallBacks.Swiff_1251294375102.error

      load = Swiff.CallBacks.Swiff_1251294375102.load

Может быть, мне не хватает какой-то проблемы безопасности / allowDomain, которую я не знаю? Конечно, я не могу публиковать и загружать .swf каждые 10 секунд на своем сайте (производительность была бы довольно низкой :))

РЕДАКТИРОВАТЬ 2: Хорошо, я сужаю проблему: скрипт фактически работает, если я открываю html-файл напрямую, но останавливает событие init при вызове через HTTP (все равно локальные или удаленные серверы). Это какая-то политика домена, которую я не знаю?

Ответы [ 2 ]

1 голос
/ 26 августа 2009

Я никогда не использовал этот конкретный сценарий mootools (могу ли я порекомендовать SWFObject? ^^), но кажется, что он не передает SWF-файл, и я смутно помню это как нормальное поведение при использовании сценария JS для встраивания Flash. Я не уверен, что есть реальное решение, но один из обходных путей, если вам действительно нужны события infoLoader вашего основного фильма (лично я никогда не использовал их), - это использование небольшого loader.swf для загрузки вашего main.swf внутри это.

0 голосов
/ 27 августа 2009

Кажется, я решил проблему, хотя не знаю как ... Среди прочего, кажется, что вставка

  mySwiff = $(mySwiff.id);

Сразу же после инъекции в контейнер свиффа сделали свое дело ... Не спрашивайте меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...