Firefox no los fondos soberanos de automóviles jugando con wmode configurado para no transpare

  • Carl
  • Beginner
  • Beginner
  • Avatar de Usuario
  • Registrado: Jul 20, 2004
  • Mensajes: 50
  • Status: Offline

Nota Mayo 13th, 2010, 3:05 pm

Hola,

Im realmente tener dos problemas, pero sólo uno de ellos es Flash relacionados. Por lo tanto, aquí está el tema relacionado con Flash. Parece que estoy teniendo problemas para conseguir bastante grave Firefox para reproducir animaciones Flash, cuando se establece en wmode "opaco" o "transpare no." Pero primero lo primero...

1. Im usando Flash 10.0.2.
2. ActionScript 3.0
3. Im tratando de publicar tanto para Flash 9 y Flash 10. Es realmente no importa que, aunque ya que el comportamiento es el mismo.

De todos modos, tengo un menú desplegable que necesita para mostrar por encima de una animación Flash introductoria. Así que, naturalmente, tengo que configurar a wmode "opaco" o "transpare no." De lo contrario van a parar detrás del archivo incrustado. El SWF juega perfectamente bien cuando me puse a wmode "ventana. "Sin embargo, tan pronto como se establece en" opaco "o" transpare no, "Tengo que haga clic derecho en el archivo SWF incrustado y jugar clic para llegar a desempeñar. En ocasiones se jugará la primera vez que cargar la página después de limpiar caché de mi navegador. Pero incluso eso no es coherente. Funciona perfectamente en IE7, IE8, Opera y 10,53.

Tengo una clase que muestra un cargador de "Carga..." Mensaje y un indicador de progreso que se llame primero. Una vez que el archivo se haya cargado, el resto de la película se reproduce. Sé que mi película Flash trabaja como este problema sólo se produce cuando me puse a wmode "opaco" o "transpare no." Id enviar un enlace a una versión de trabajo de esto, pero Appare notly Im no autorizado a publicar enlaces.

Desafortunadamente, deshacerse de Flash no es una opción como necesaria en dos secciones principales del sitio web. Ive pasó la mayor parte del día tratando de arreglar este problema y nada ha funcionado. Quizás estoy perdiendo de algo bastante obvio, pero he estado en él desde hace un tiempo y un par de ojos sería muy apreciada.

Im usando SWFObject para incrustar el archivo SWF:
Código: [ Select ]
<script type="text/javascript" src="/scripts/core/swfobject.js"></script>

<script type="text/javascript">
  var flashvars = {
    bgcolor: "#FFFFFF"
  };
  var params = {
    menu: "true",
    loop: "false",
    wmode: "transparent"
  };
  swfobject.embedSWF("/flash/WelcomeMovie.swf", "intro-movie", "600", "310", "10.0.45", "/flash/expressInstall.swf", flashvars, params);
</script>
  1. <script type="text/javascript" src="/scripts/core/swfobject.js"></script>
  2. <script type="text/javascript">
  3.   var flashvars = {
  4.     bgcolor: "#FFFFFF"
  5.   };
  6.   var params = {
  7.     menu: "true",
  8.     loop: "false",
  9.     wmode: "transparent"
  10.   };
  11.   swfobject.embedSWF("/flash/WelcomeMovie.swf", "intro-movie", "600", "310", "10.0.45", "/flash/expressInstall.swf", flashvars, params);
  12. </script>

Código: [ Select ]
<div id="intro-movie">
  <p>
    Other content goes here
  </p>
</div>
  1. <div id="intro-movie">
  2.   <p>
  3.     Other content goes here
  4.   </p>
  5. </div>


En caso de que su ayuda, heres mi clase cargador y cómo Im usando:

Código: [ Select ]
package heliac.core
{
    import flash.events.ProgressEvent;
    import flash.events.Event;
    import flash.display.LoaderInfo;
    import flash.text.TextField;
    import flash.display.MovieClip;

    public class mainLoader
    {
        protected var mainStage:Object;
        protected var loadingText:TextField;
        protected var loadingBar:MovieClip;
        protected var stopFrame:int;
        
        public function mainLoader(currentStage:Object, newLoadingText:TextField,
                                  newLoadingBar:MovieClip, newStopFrame:int)
        {
            this.mainStage = currentStage;
            this.loadingText = newLoadingText;
            this.loadingBar = newLoadingBar;
            this.stopFrame = newStopFrame;
            
            this.mainStage.stop();
            this.mainStage.loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
            this.mainStage.loaderInfo.addEventListener(Event.COMPLETE, completeListener);
        }
        
        protected function progressListener(e:ProgressEvent):void
        {
            var loaded:Number = e.bytesLoaded / e.bytesTotal;
            var percent:int = loaded * 100;
        
            var loading:String = "";
            
            if (this.mainStage.loaderInfo.parameters.loading != null)
            {
                loading = unescape(this.mainStage.loaderInfo.parameters.loading);
            }
            else
            {
                loading = "Loading";
            }
        
            this.loadingText.text = loading + ": " + percent + "%";
            this.loadingBar.scaleX = loaded;
        }
        
        protected function completeListener(e:Event):void
        {
            this.mainStage.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressListener);
            this.mainStage.loaderInfo.removeEventListener(Event.COMPLETE, completeListener);
            this.mainStage.gotoAndStop(this.stopFrame);
        }
    }
}
  1. package heliac.core
  2. {
  3.     import flash.events.ProgressEvent;
  4.     import flash.events.Event;
  5.     import flash.display.LoaderInfo;
  6.     import flash.text.TextField;
  7.     import flash.display.MovieClip;
  8.     public class mainLoader
  9.     {
  10.         protected var mainStage:Object;
  11.         protected var loadingText:TextField;
  12.         protected var loadingBar:MovieClip;
  13.         protected var stopFrame:int;
  14.         
  15.         public function mainLoader(currentStage:Object, newLoadingText:TextField,
  16.                                   newLoadingBar:MovieClip, newStopFrame:int)
  17.         {
  18.             this.mainStage = currentStage;
  19.             this.loadingText = newLoadingText;
  20.             this.loadingBar = newLoadingBar;
  21.             this.stopFrame = newStopFrame;
  22.             
  23.             this.mainStage.stop();
  24.             this.mainStage.loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
  25.             this.mainStage.loaderInfo.addEventListener(Event.COMPLETE, completeListener);
  26.         }
  27.         
  28.         protected function progressListener(e:ProgressEvent):void
  29.         {
  30.             var loaded:Number = e.bytesLoaded / e.bytesTotal;
  31.             var percent:int = loaded * 100;
  32.         
  33.             var loading:String = "";
  34.             
  35.             if (this.mainStage.loaderInfo.parameters.loading != null)
  36.             {
  37.                 loading = unescape(this.mainStage.loaderInfo.parameters.loading);
  38.             }
  39.             else
  40.             {
  41.                 loading = "Loading";
  42.             }
  43.         
  44.             this.loadingText.text = loading + ": " + percent + "%";
  45.             this.loadingBar.scaleX = loaded;
  46.         }
  47.         
  48.         protected function completeListener(e:Event):void
  49.         {
  50.             this.mainStage.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressListener);
  51.             this.mainStage.loaderInfo.removeEventListener(Event.COMPLETE, completeListener);
  52.             this.mainStage.gotoAndStop(this.stopFrame);
  53.         }
  54.     }
  55. }

A continuación se ejecuta en el primer fotograma de mi película Flash:
Código: [ Select ]
import heliac.core.mainLoader;

var loader:mainLoader = new mainLoader(root, loadingText, loadingBar, 2);
  1. import heliac.core.mainLoader;
  2. var loader:mainLoader = new mainLoader(root, loadingText, loadingBar, 2);

Así que, um, ayuda! Este problema se está volviendo loco. Gracias por adelantado!
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Mayo 13th, 2010, 3:05 pm

  • Carl
  • Beginner
  • Beginner
  • Avatar de Usuario
  • Registrado: Jul 20, 2004
  • Mensajes: 50
  • Status: Offline

Nota Mayo 13th, 2010, 4:29 pm

Nunca falla. Puedo publicar en este foro después de las horas de no ser capaz de encontrar una solución (ya sea a través de una búsqueda o por mi cuenta) y efectivamente, me parece una posible solución!

Alguien parece estar teniendo este problema y que parecían limitar la búsqueda a la Event.COMPLETE y eventos de progreso no funciona como se espera en Firefox. Las cargas primer cuadro y luego no pasa nada más allá de eso no se debe a los eventos de tiro. Esto es coherente con lo que Im experimentando:

Quote:
Recientemente he tenido problemas en unos pocos sitios web AS3. Si incrusta el archivo SWF con diferentes wmode, como opacos o transpare no en su versión de Flash para Firefox no se cargará. En realidad, el marco de las cargas de Flash y luego parece que se detenga. Bueno, ciertamente cargas pero el problema es que loaderInfo Event.COMPLETE y el progreso no se disparan en Firefox.

Eso es cojo! Firefox tiene este "avanzado" característica con Flash, no lo carga hasta que pestaña del navegador tiene el foco. Parece que nos estamos problema desde allí. De todos modos, una solución consiste en establecer la función de verificación que Event.ENTER_FRAME gestor

Código: [ Select ]
    addEventListener(Event.ENTER_FRAME, _listenLoading);// on enter frame to check if it’s loaded
    private function _listenLoading(e:Event):void {
     if (this.loaderInfo.bytesLoaded == this.loaderInfo.bytesTotal) {
      removeEventListener(Event.ENTER_FRAME, _listenLoading);
      _onSiteLoaded();
     }
    }
  1.     addEventListener(Event.ENTER_FRAME, _listenLoading);// on enter frame to check if it’s loaded
  2.     private function _listenLoading(e:Event):void {
  3.      if (this.loaderInfo.bytesLoaded == this.loaderInfo.bytesTotal) {
  4.       removeEventListener(Event.ENTER_FRAME, _listenLoading);
  5.       _onSiteLoaded();
  6.      }
  7.     }


Se publicó la solución anterior, pero no lo he probado todavía está por ver si resuelve mi problema.
  • Carl
  • Beginner
  • Beginner
  • Avatar de Usuario
  • Registrado: Jul 20, 2004
  • Mensajes: 50
  • Status: Offline

Nota Mayo 13th, 2010, 9:51 pm

Ok, una buena noticia! He encontrado una solución a esto. Como el post anterior sugiere, el evento no fue consistentemente Event.COMPLETE disparar en Firefox. Sin embargo, la solución anterior no funciona. Por lo menos no me funcionó. No cancelaremos, ya que puede resolver el problema para todos los problemas que puedan surgir.

Una vez me enteré de que había un problema con Event.COMPLETE, una rápida búsqueda en Google revela otra solución. Esta solución utiliza Event.INIT. Un enorme agradecimiento va para un post en ActionScript org <dot> y una entrada de blog de numiko com <dot>. marguera y Ryan (creo) en los sitios respectivos recibe todo el crédito. Ustedes me salvaron horas por valor de depuración. 8)

Básicamente, he tenido que añadir dos líneas de código (4 si se cuentan entre paréntesis). Por alguna razón, Event.COMPLETE no estaba disparando todo el tiempo en Firefox. No pude reproducir el error de forma coherente. Así que la adición de un detector de eventos adicionales (tiene que ser Event.INIT) es necesario hacer completeListener seguro () es llamada y los avances de cine más allá del primer cuadro. ¿Por qué Event.INIT? La documentación de Flash que Event.INIT se llama cuando:

Quote:
* Todas las propiedades y métodos asociados con el objeto cargado y los relacionados con el objeto LoaderInfo son accesibles.
* Los constructores de todos los objetos secundarios ha completado.

Supuestamente, el evento INIT siempre precede al evento completo, pero por alguna razón que no siempre sucede en Firefox.

En el constructor de la clase mainLoader, he tenido que añadir un detector de eventos para la segunda completeListener ():
Código: [ Select ]
this.mainStage.loaderInfo.addEventListener(Event.INIT, completeListener);

Y luego en el completeListener () función, he tenido que añadir un cheque para ver si el archivo terminado de cargar:
Código: [ Select ]
if (this.mainStage.loaderInfo.bytesLoaded == this.mainStage.loaderInfo.bytesTotal)
{
  // remove event listeners and finish setting up movie
}
  1. if (this.mainStage.loaderInfo.bytesLoaded == this.mainStage.loaderInfo.bytesTotal)
  2. {
  3.   // remove event listeners and finish setting up movie
  4. }


Heres la clase de trabajo completo:
Código: [ Select ]
package heliac.core
{
    import flash.events.ProgressEvent;
    import flash.events.Event;
    import flash.display.LoaderInfo;
    import flash.text.TextField;
    import flash.display.MovieClip;

    public class mainLoader
    {
        protected var mainStage:Object;
        protected var loadingText:TextField;
        protected var loadingBar:MovieClip;
        protected var stopFrame:int;
        
        public function mainLoader(currentStage:Object, newLoadingText:TextField,
                                  newLoadingBar:MovieClip, newStopFrame:int)
        {
            this.mainStage = currentStage;
            this.loadingText = newLoadingText;
            this.loadingBar = newLoadingBar;
            this.stopFrame = newStopFrame;
            
            this.mainStage.stop();
            this.mainStage.loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
            this.mainStage.loaderInfo.addEventListener(Event.INIT, completeListener);
            this.mainStage.loaderInfo.addEventListener(Event.COMPLETE, completeListener);
        }
        
        protected function progressListener(e:ProgressEvent):void
        {
            var loaded:Number = e.bytesLoaded / e.bytesTotal;
            var percent:int = loaded * 100;
        
            var loading:String = "";
            
            if (this.mainStage.loaderInfo.parameters.loading != null)
            {
                loading = unescape(this.mainStage.loaderInfo.parameters.loading);
            }
            else
            {
                loading = "Loading";
            }
        
            this.loadingText.text = loading + ": " + percent + "%";
            this.loadingBar.scaleX = loaded;
        }

        protected function completeListener(e:Event):void
        {
            if (this.mainStage.loaderInfo.bytesLoaded == this.mainStage.loaderInfo.bytesTotal)
            {
                this.mainStage.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressListener);
                this.mainStage.loaderInfo.removeEventListener(Event.INIT, completeListener);
                this.mainStage.loaderInfo.removeEventListener(Event.COMPLETE, completeListener);
                this.mainStage.gotoAndStop(this.stopFrame);
            }
        }
    }
}
  1. package heliac.core
  2. {
  3.     import flash.events.ProgressEvent;
  4.     import flash.events.Event;
  5.     import flash.display.LoaderInfo;
  6.     import flash.text.TextField;
  7.     import flash.display.MovieClip;
  8.     public class mainLoader
  9.     {
  10.         protected var mainStage:Object;
  11.         protected var loadingText:TextField;
  12.         protected var loadingBar:MovieClip;
  13.         protected var stopFrame:int;
  14.         
  15.         public function mainLoader(currentStage:Object, newLoadingText:TextField,
  16.                                   newLoadingBar:MovieClip, newStopFrame:int)
  17.         {
  18.             this.mainStage = currentStage;
  19.             this.loadingText = newLoadingText;
  20.             this.loadingBar = newLoadingBar;
  21.             this.stopFrame = newStopFrame;
  22.             
  23.             this.mainStage.stop();
  24.             this.mainStage.loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
  25.             this.mainStage.loaderInfo.addEventListener(Event.INIT, completeListener);
  26.             this.mainStage.loaderInfo.addEventListener(Event.COMPLETE, completeListener);
  27.         }
  28.         
  29.         protected function progressListener(e:ProgressEvent):void
  30.         {
  31.             var loaded:Number = e.bytesLoaded / e.bytesTotal;
  32.             var percent:int = loaded * 100;
  33.         
  34.             var loading:String = "";
  35.             
  36.             if (this.mainStage.loaderInfo.parameters.loading != null)
  37.             {
  38.                 loading = unescape(this.mainStage.loaderInfo.parameters.loading);
  39.             }
  40.             else
  41.             {
  42.                 loading = "Loading";
  43.             }
  44.         
  45.             this.loadingText.text = loading + ": " + percent + "%";
  46.             this.loadingBar.scaleX = loaded;
  47.         }
  48.         protected function completeListener(e:Event):void
  49.         {
  50.             if (this.mainStage.loaderInfo.bytesLoaded == this.mainStage.loaderInfo.bytesTotal)
  51.             {
  52.                 this.mainStage.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressListener);
  53.                 this.mainStage.loaderInfo.removeEventListener(Event.INIT, completeListener);
  54.                 this.mainStage.loaderInfo.removeEventListener(Event.COMPLETE, completeListener);
  55.                 this.mainStage.gotoAndStop(this.stopFrame);
  56.             }
  57.         }
  58.     }
  59. }

Esperamos que esto ayudará a cualquier persona que se encuentra con este problema.
  • graphixboy
  • Control + Z
  • Mastermind
  • Avatar de Usuario
  • Registrado: Jul 11, 2005
  • Mensajes: 1828
  • Loc: In the Great White North
  • Status: Offline

Nota Mayo 17th, 2010, 3:24 pm

Gracias por publicar la solución. Im seguro de que no ayudó mucho cuando estás tratando de obtener la respuesta pero bueno a veces por escrito sobre el problema es la mejor manera de forzar a su cerebro para pensar de manera diferente. Me alegro de que tengo trabajo de todos modos.
If at first you don't succeed F1... If that doesn't work try Google!
//// Designer, Developer & Teacher - Interactive, Motion and 3D \\\\
Portfolio at WhenImNotSleeping.com

Publicar Información

  • Total de mensajes en este tema: 4 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 94 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC