ActionScript и JavaScript
Возникла проблема.
Я делал мост с AS3 в JS. 1. Вставляю в html swf. 2. Нахожу по id нужный объект 3. Пишу функцию взятую с AS3. Например, obj.setValue(val); - и она не работает! 4. Пишу туже функцию в событии например при нажатии на кнопку, работает отлично. как сделать так что бы можно было пользоватся функциями сразу после создания объекта??? если коротко, то типа такого кода: obj = getSWF("objectSWF_ID"); obj.setValue(100); - полсе этой строки код не работает! если писать так, то работает: obj = getSWF("objectSWF_ID"); btn.onclick = function(){ obj.setValue(100); } |
наверно, потому что на момент инициализации obj флешка еще не прогрузилась, а значит и методов никаких еще нет.
ориентируйтесь на событие window.onload либо аналогичное для флешки. с флешками я не работал, но полагаю, что должно сработать такое: obj = getSWF("objectSWF_ID"); obj.onload=function(){ obj.setValue(100); } |
не выходит...единственный плюс в том что код который расположен ниже теперь работает...но функция сама всеравно не работает
|
м?
Цитата:
вы внримательно читали мое сообщение, или только код себе скопировали, не вникая? |
тогда код расположенный после импортированной функции неработал вообще
если эту функцию впихнуть в событие onload то она также невыолпняется, но код идущий после события теперь работает у меня там создается кнопка...в первом случае ее нет, в другом - она есть и работает на ней onclick кину код весь... мне кажется что я чета с событиями нето делаю <script language="javascript"> function DSWFLib(lib_file,style){ style.width = style.width||style.w||100; style.height = style.height||style.h||100; style.x = style.left||style.x||5; style.y = style.top||style.y||5; var frm = DFrame(style); frm.setDrag({method:"drag"}); var swf = '<object '+ 'id="SWFLIBNAME'+frm.id+'" width='+style.width+' height='+style.height+' '+ 'classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" '+ 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">'+ '<param name="movie" value="'+lib_file+'" />'+ '<param name="allowScriptAccess" value="sameDomain" />'+ ' <param name="wmode" value="transparent">'+ '<embed'+ ' src="'+lib_file+'"'+ ' wmode="transparent"'+ ' name="SWFLIBNAME'+frm.id+'" align="middle"'+ 'play="true" loop="false" quality="high" allowScriptAccess="sameDomain"'+ 'width='+style.width+' height='+style.height+' scale="exactfit" '+ 'type="application/x-shockwave-flash"'+ 'pluginspage="http://www.macromedia.com/go/getflashplayer">'+ '</embed>'+ '</object>'; frm.innerHTML = swf; frm.getSWF = function(){ var M$ = navigator.appName.indexOf("Microsoft")!=-1; return (M$ ? window : document)["SWFLIBNAME"+frm.id]; } frm.object = frm.getSWF(); frm.onProgress = DGUI_EMPTY_FUNCTIONS; frm.onCompleted = DGUI_EMPTY_FUNCTIONS; return frm; } var swf = DSWFLib("lib/DSound.swf"+DCacheOff(),{x:10,y:10,w:200,h:200}); //swf.object.setContext(400,true); // если эту строку разкоментить, то они и код после нее не работает var btn1=DHSButton({mainStyle:{x:250,y:100,width:150,height:40}, firstStyle:{backgroundColor:"#bb5555"}, secondStyle:{backgroundColor:"#55bb55", display:"none"}, textStyle:{color:"#9999ff",fontSize:20}, text:"Загрузить" }); var btn2=DHSButton({mainStyle:{x:250,y:140,width:150,height:40}, firstStyle:{backgroundColor:"#bb5555"}, secondStyle:{backgroundColor:"#55bb55", display:"none"}, textStyle:{color:"#9999ff",fontSize:20}, text:"Играть" }); //////////////////ФУНКЦИИ ПОЛУЧАЕМЫЕ ИЗ ФЛЭША//////////////// btn1.onclick = function(){swf.object.load("music/AkonClapAgain.mp3",false); } // работа.т отлично btn2.onclick = function(){swf.object.play("music/AkonClapAgain.mp3",false); } //работают отлично //////////////////////////////////////////////////////////// var win_consol=DConsole({x:500,y:100}); var txt = DText(""); swf.onload = function(){ txt.setText(swf.object); //функция не работает, но код ниже работает } var timer=new DTimer(200); timer.onTimer=function(){ win_consol.clin(); win_consol.addLine("Статус: "+swf.object.getStatus()); //работают отлично win_consol.addLine("Загрузка: "+swf.object.getLoaded()); //работают отлично win_consol.addLine("Резервный буфер: "+ swf.object.getContext()); //работают отлично win_consol.addLine("Ошибки: "+swf.object.getError()); //работают отлично } timer.start(); </script> </html> |
Опера выкидывают такую ошибку
message: Statement on line 99: Type mismatch (usually non-object value supplied where object required) |
Цитата:
или по вашему мнению. код без начального body - является полным? |
1) а флешка в документ вставляется?
2) у тэга object нету события onload (по стандарту), и похоже не только по стандарту - лучше что-то делать по window.onload |
Цитата:
Код весь, все функции имеют понятные имена, например не трудно догодатся что DHSButton создает кнопку, или DCоnsole создает доп. консоль для вывода промежуточных результатов. Насчет window.onload попробую..времени небыло пока. |
по window.onload странно как-то
в IE пашет норм window.onload = function(){ swf.obj.setContext(3000); } а в Опере только с setTimeout("swf.obj.setContext(3000);",100) интересно еще что при onload рабоает при значении 100, а если писать сразу вкоде, то толко после 300 хотя по теории ка и в IE должна работать без setTimeout В IE даже работает window.setTimeout("sound.setContext(3000);",0); с нулем всмысле...типа как я понял ставит в очередь на выполнение.....но Опера упертая...и никак А можно как-нибудь сделать чтобы страница ваще не работала пока все не загрузится и не создадится? window.onload не совсем выход Пытался разбить на две функции 1. Загружает флэш 2. Находит object или embed но суть от этого не поменялась... |
Часовой пояс GMT +3, время: 13:09. |