0

Web サイトに mp3player swf があります。mp3ファイルがswfに完全にロードされたときにページを表示して音楽の再生を開始するには、mp3ファイルが完全にロードされたときにExternalInterfaceの呼び出しを送信するアクションスクリプトの機能を追加しました。

なので

private function loadMP3():void {

 ...
 ...

// Load complete function
mp3.addEventListener(Event.COMPLETE, onLoadComplete);
}


private function onLoadComplete(e:Event):void {

if (ExternalInterface.available)
    {
        ExternalInterface.call("JSCallback");
    }
}

私のhtml jquery関数

function JSCallback()
{
// Finish load swf and hide overlay
$('#loader-overlay').fadeOut('slow');
}

この方法は、XP 上の Internet Explorer 8、Firefox、Chrome、Opera でうまく機能します。Firefox の win 7 では、IE 10 は正常に動作しますが、Chrome は完全に読み込まれる前に音楽の再生を開始し、そのページが表示されます。この問題を解決する方法はありますか?ありがとう

フルクラス

package xxx.xxx.xxx.sound {

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.text.TextField;
import flash.external.ExternalInterface;

public class MP3Player extends MovieClip {

    // Location of the config xml file
    public static const CONFIG_XML_URL:String = "xml/config.xml";

    // URL of the mp3 file
    public static var MP3_URL:String = "mp3/track.mp3";

    // Main color for the mp3 player
    public static var MAIN_COLOR:uint = 0xFF0000;

    // An XMLLoader to load the configuration file
    private var xmlLoader:XMLLoader;

    // Sound object to be played
    private var mp3:Sound = new Sound();

    // A sound channel to play the sound object
    private var channel:SoundChannel;

    // Holds the pause position
    private var pausePos:Number;

    // A byte array to read spectrum
    private var bytes:ByteArray = new ByteArray();

    // Indicates whether the mp3 player is playing or not.
    private var _isPlaying:Boolean = false;

    // Holds the previous label color
    private var _prevColor:uint;        

    public function MP3Player() {

        // Initialize the player
        init();

    }

    /**
     * Initializes the player.
     */
    private function init():void {

        // Use as a button
        useHandCursor = true;
        buttonMode = true;
        mouseChildren = false;
        equalizer.alpha = 0;

        // Add necessary event listeners
        addEventListener(Event.ENTER_FRAME, onEnterFrame, false, 0, true);
        addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown, false, 0, true);
        addEventListener(MouseEvent.MOUSE_OVER, onMouseOver, false, 0, true);
        addEventListener(MouseEvent.MOUSE_OUT, onMouseOut, false, 0, true);
        loadConfig();

    }

    /**
     * Sets the color of the player to the given parameter.
     */
    public function setColor(color:uint):void {

        MAIN_COLOR = color;

        // Change the color of the equalizer
        var colorTransform:ColorTransform = equalizer.transform.colorTransform;
        colorTransform.color = MAIN_COLOR;
        equalizer.transform.colorTransform = colorTransform;

    }


    /**
     * Loads the configuration file to the memory.
     */
    private function loadConfig() {

        // Start loading the config.xml file
        xmlLoader = new XMLLoader(CONFIG_XML_URL);
        xmlLoader.addEventListener(XMLLoader.XML_LOADED, onXMLLoaded);
        xmlLoader.load();

    }

    /**
     * This method is called when the xml file is loaded to the memory.
     */
    private function onXMLLoaded(evt:Event):void {

        // Get configuration parameters
        var xml:XML = xmlLoader.getXML();
        MP3_URL = xml.@mp3URL;
        MAIN_COLOR = xml.@color;

        // Change the color of the equalizer
        equalizer.alpha = 1;
        setColor(MAIN_COLOR);

        // Start loading the mp3
        loadMP3();

    }

    /**
     * Start loading the mp3 file.
     */
    private function loadMP3():void {

        mp3.load(new URLRequest(MP3_URL));
        mp3.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true);
        channel = mp3.play();
        channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);            
        _isPlaying = true;

        // Load complete function
        mp3.addEventListener(Event.COMPLETE, onLoadComplete);
    }

    /**
     * This method is called whenever a new enter frame event occurs.
     */
    private function onEnterFrame(evt:Event):void {

        try {
            SoundMixer.computeSpectrum(bytes, true, 0);
        } catch (e:Error) {
        }

        equalizer.update(bytes);

    }

    /**
     * This method is called when playing the sound is finished.
     */
    private function onSoundComplete(evt:Event):void {

        // Loop
        channel = mp3.play();
        channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
        _isPlaying = true;

    }

    /**
     * This method is called when the mouse is over the mp3 player.
     */
    private function onMouseOver(evt:MouseEvent):void {

        // Change the color of the equalizer
        _prevColor = label.textColor;
        label.textColor = MAIN_COLOR;

    }

    /**
     * This method is called when the mouse leaves the mp3 player.
     */
    private function onMouseOut(evt:MouseEvent):void {

        label.textColor = _prevColor;

    }

    /**
     * This method is called when the mouse is clicked on the mp3 player.
     */
    private function onMouseDown(evt:MouseEvent):void {

        if (_isPlaying) {
            pausePos = channel.position;
            channel.stop();
            _isPlaying = false;
            label.text = "MUSIC OFF";               
        } else {
            channel = mp3.play(pausePos);
            channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
            _isPlaying = true;
            label.text = "MUSIC ON";
        }

    }

    /**
     * This method is called when load complete and sent call to js.
     */
    private function onLoadComplete(e:Event):void {
            // This will call a JavaScript function
            //ExternalInterface.call('loadedCallback');
        if (ExternalInterface.available)
            {
                ExternalInterface.call("JSCallback");
            }

    }

    /**
     * This method is called if an IO error occurs.
     */
    private function onIOError(evt:IOErrorEvent):void {
    }

}

 }
4

1 に答える 1