2009-04-16 13 views
1

Ich möchte eine JavaScript-Funktion aus einer eingebetteten SWF-Datei aufrufen. Insbesondere würde Ich mag eine Funktion in einem meiner extern verlinkter Javascript-Dateien rufen aus:actionscript + javascript

function loadTrack(){ 



//Radio Mode feature by nosferathoo, more info in: https://sourceforge.net/tracker/index.php?func=detail&aid=1341940&group_id=128363&atid=711474 

if (radio_mode && track_index==playlist_size-1) { 

    playlist_url=playlist_array[track_index].location; 

    for (i=0;i<playlist_mc.track_count;++i) { 

     removeMovieClip(playlist_mc.tracks_mc["track_"+i+"_mc"]); 

    } 

    playlist_mc.track_count=0; 

    playlist_size=0; 

    track_index=0; 

    autoload=true; 

    autoplay=true; 

    loadPlaylist(); 

    return(0); 

} 



start_btn_mc.start_btn._visible = false; 

track_display_mc.display_txt.text = playlist_array[track_index].label; 

if(track_display_mc.display_txt._width>track_display_mc.mask_mc._width){ 

    track_display_mc.onEnterFrame = scrollTitle; 

}else{ 

    track_display_mc.onEnterFrame = null; 

    track_display_mc.display_txt._x = 0; 

} 

mysound.loadSound(playlist_array[track_index].location,true); 

play_mc.gotoAndStop(2) 



//info button 

if(playlist_array[track_index].info!=undefined){ 

    info_mc._visible = true; 

    info_mc.info_btn.onPress = function(){ 

     getURL(playlist_array[track_index].info,"_blank") 

    } 

    info_mc.info_btn.onRollOver = function(){ 

     track_display_mc.display_txt.text = info_button_text; 

    } 

    info_mc.info_btn.onRollOut = function(){ 

     track_display_mc.display_txt.text = playlist_array[track_index].label; 

    } 

}else{ 

    info_mc._visible = false; 

} 

resizeUI(); 

_root.onEnterFrame=function(){ 

    //HACK doesnt need to set the volume at every enterframe 

    mysound.setVolume(this.volume_level) 

    var load_percent = (mysound.getBytesLoaded()/mysound.getBytesTotal())*100 

    track_display_mc.loader_mc.load_bar_mc._xscale = load_percent; 

    if(mysound.getBytesLoaded()==mysound.getBytesTotal()){ 

     //_root.onEnterFrame = null; 

    } 

} 

}

, die in einer .as-Datei, die ich davon ausgehen, irgendwie wird die SWF-Datei. Wie würde ich darüber gehen und die .as-Datei neu kompilieren?

Antwort

7

Lassen Sie uns diese Antworten erarbeiten gemeinsam für AS2 und AS3 mit Einspritzung JS und die ExternalInterface (beide Richtungen arbeiten in beiden Sprachen)

AS2:


// to use javascript injection in a url request 
getURL("javascript:displayPost(" + postId + "," + feedId +");", "_self"); 

// to use the external interface 
import flash.external.ExternalInterface; 
ExternalInterface.call("displayPost",postId,feedId); 

AS3 :


// to use javascript injection in a url request 
navigateToURL(new URLRequest("javascript:displayPost(" + postId + "," + feedId +");"), "_self"); 

// to use the external interface 
import flash.external.ExternalInterface; 
ExternalInterface.call("displayPost",postId,feedId); 

Beachten Sie, dass in AS2 und AS3 die ExternalInterface-Methode das Exa ist ct same (ExternalInterface wurde in Flash 8 für AS2 eingeführt). Und in AS2 und AS3 ist die Javascript-Injection-Methode die gleiche, außer dass es navigateToURL anstelle von getURL ist und die URL-Zeichenfolge in neue URLRequest() eingeschlossen wird, da sie ein URLRequest-Objekt benötigt. Auch bei der Verwendung von Javascript-Injection empfiehlt es sich, das Zielfenster auf "_self" zu setzen, um das Öffnen eines neuen Tabs oder Fensters zu vermeiden.

3

auch Incase jemand in der Zukunft auf diese Frage suchen die Actionscript 3-Version von AltCo gnito Antwort ist wie folgt aus:

ExternalInterface.call("displayPost",postId,feedId);