прошить as3 плеер в IE - PullRequest
0 голосов
/ 15 декабря 2011

Я пытаюсь создать простой аудио-флеш-плеер, который при нажатии вызывает функцию js, он отлично работает во всех браузерах, кроме IE.я не могу понять, в чем проблема!

здесь html:

   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
    <meta http-equiv="Content-Type" content="text/html;  charset=ISO-8859-1" />
    <title>player</title>
    </head>
    <body >

    <![if !IE]>
    <object type="application/x-shockwave-flash" classid="bla" width="18" height="30"               id="myFlashMovie"> 
<param name="wmode" value="opaque" />   
<param name="FlashVars" value="mp3.mp3" />
<embed type="application/x-shockwave-flash" width="18" height="30"      src="player%2Eswf" id="flashObj" FlashVars="audioTrackPath=mp3%2Emp3" />
    </object>
    <![endif]>

    <!--[if IE]>
    <object type="application/x-shockwave-flash" classid="clsid:d27cdb6e-ae6d-11cf-  96b8-444553540000" width="18" height="30" id="movie" allowScriptAccess="sameDomain" >
    <PARAM NAME="movie" id="movie" value="player%2Eswf?audioTrackPath=mp3%2Emp3"/>
<PARAM NAME="FlashVars" value="mp3%2Emp3" />
<PARAM NAME="allowScriptAccess" value="always" />   
    <![endif]-->    


    <script type="text/javascript">
    alert("Hello World");
    </script>
    <noscript>Sorry, your browser does not support JavaScript!</noscript>

    <script type="text/javascript">
    function countdown() {
            alert("countdown");
                }
    </script>   
    </body>
    </html>

и вот как:

    import flash.media.Sound;
    import flash.media.SoundLoaderContext;
    import flash.net.URLRequest;
    flash.system.Security.allowDomain("http://localhost");



    var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
    var audioTrackPath:String = String(paramObj['audioTrackPath']);


    stop();
    play_btn.addEventListener(MouseEvent.CLICK, playSound);

    function playSound (e:MouseEvent):void{
try {
    ExternalInterface.call("countdown");
    } catch(e:Error) {
    trace(e)
    }
//ExternalInterface.call("countdown");
gotoAndStop(2);
var soundClip:Sound; 
var soundChannel:SoundChannel = new SoundChannel();

function init() {
    soundClip = new Sound();
    soundClip.addEventListener(ProgressEvent.PROGRESS, soundLoading);
    soundClip.addEventListener(Event.COMPLETE, soundLoaded);

    var req:URLRequest = new URLRequest(audioTrackPath);
    var context:SoundLoaderContext = new SoundLoaderContext(1000, true);
    soundClip.load(req,context);
    //soundChannel = soundClip.play();
}

init();

function soundLoaded(e:Event) {
    soundChannel = soundClip.play();

}

function soundLoading(e:ProgressEvent) {
// preloader information goes here
    trace(String(int(100*e.bytesLoaded / e.bytesTotal))+"%");
}

stop_btn.addEventListener(MouseEvent.CLICK, stopSound);
    function stopSound (e:MouseEvent):void{
    gotoAndStop(1);
    soundChannel.stop();
}   
}

Я был в Google в течение 3дней, но я не могу найти ответ ...

Ответы [ 4 ]

1 голос
/ 16 декабря 2011

Вы должны были заявить, что проблема заключается в том, что ExternalInterface.call () не работает с самого начала.

Создайте простой проект с использованием только внешнего вызова интерфейса, например

if(ExterlInterface.available){
    ExternalInterface.call('alert','ExterlInterface.available');
}

наПервый кадр (если вы используете флэш-память) и опубликуйте его

, после чего вы получите html

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>ei</title>
</head>
<body bgcolor="#ffffff">
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="550" height="400" id="ei" align="middle">
    <param name="allowScriptAccess" value="sameDomain" />
    <param name="allowFullScreen" value="false" />
    <param name="movie" value="ei.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />  <embed src="ei.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="ei" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />
    </object>
</body>
</html>

Если это не удастся, то ваш браузер вызывает проблемы, у меня работает нормально.Если он работает, значит, ваш html плох.

0 голосов
/ 15 декабря 2011

Замените это:

<param name="FlashVars" value="mp3.mp3" />

На это:

<param name="FlashVars" value="audioTrackPath=mp3.mp3" />

FlashVars - это пары имя-значение.

Огньен, не поймите это неправильноНо в качестве совета вместо того, чтобы «гуглить в течение 3 дней», в следующий раз вы можете приложить некоторые усилия к корректировке кода.

0 голосов
/ 16 декабря 2011

похоже, что вы должны изменить свой classid с bla на clsid:d27cdb6e-ae6d-11cf-96b8-444553540000
также проверьте мой аналогичный проект с открытым исходным кодом (который, однако, не работает в IE 6, но хорошо в новых версиях)

0 голосов
/ 15 декабря 2011

Похоже, вам не хватает параметра фильма в определении объекта. Разные браузеры используют разные теги, из которых они получают флэш-информацию - некоторые используют embed, некоторые используют object.

попробуйте этот HTML

    <object type="application/x-shockwave-flash" classid="bla" width="18" height="30"               id="myFlashMovie"> 
<param name="movie" value="player.swf">
<param name="wmode" value="opaque" />   
<param name="FlashVars" value="mp3.mp3" />
<embed type="application/x-shockwave-flash" width="18" height="30"      src="player.swf" id="flashObj" FlashVars="audioTrackPath=mp3.mp3" />
    </object>

я бы также поместил ссылку на файл непосредственно в URL

<param name="movie" value="player.swf?audioTrackPath=mp3.mp3">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...