Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ActionScript и JavaScript (https://javascript.ru/forum/misc/3671-actionscript-i-javascript.html)

DaeMooN 13.05.2009 22:01

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); 
}

Gvozd 13.05.2009 22:43

наверно, потому что на момент инициализации obj флешка еще не прогрузилась, а значит и методов никаких еще нет.
ориентируйтесь на событие window.onload либо аналогичное для флешки.
с флешками я не работал, но полагаю, что должно сработать такое:
obj = getSWF("objectSWF_ID");
obj.onload=function(){
obj.setValue(100);
}

DaeMooN 13.05.2009 22:52

не выходит...единственный плюс в том что код который расположен ниже теперь работает...но функция сама всеравно не работает

Gvozd 14.05.2009 01:41

м?
Цитата:

Сообщение от DaeMooN
единственный плюс в том что код который расположен ниже теперь работает...но функция сама всеравно не работае

как это ?код работает, а функция не работает?
вы внримательно читали мое сообщение, или только код себе скопировали, не вникая?

DaeMooN 14.05.2009 01:50

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

если эту функцию впихнуть в событие 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>

DaeMooN 14.05.2009 02:01

Опера выкидывают такую ошибку

message: Statement on line 99: Type mismatch (usually non-object value supplied where object required)

Gvozd 14.05.2009 02:28

Цитата:

Сообщение от DaeMooN
кину код весь...

если уж выкладываете весь код, то выкладывайте ВЕСЬ код, а не образайте его по краям.
или по вашему мнению. код без начального body - является полным?

x-yuri 14.05.2009 10:22

1) а флешка в документ вставляется?
2) у тэга object нету события onload (по стандарту), и похоже не только по стандарту - лучше что-то делать по window.onload

DaeMooN 15.05.2009 12:48

Цитата:

Сообщение от Gvozd (Сообщение 18862)
если уж выкладываете весь код, то выкладывайте ВЕСЬ код, а не образайте его по краям.
или по вашему мнению. код без начального body - является полным?

Ну в боди прописан только js файл...он информации ваи никакой не даст.
Код весь, все функции имеют понятные имена, например не трудно догодатся что DHSButton создает кнопку, или DCоnsole создает доп. консоль для вывода промежуточных результатов.

Насчет window.onload попробую..времени небыло пока.

DaeMooN 15.05.2009 13:24

по 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.