actionscript + javascript

丶灬走出姿态 提交于 2019-12-19 10:45:14

问题


I'd like to call a javascript function from an embedded .swf file. Specifically, I'd like to call a function in one of my externally linked javascript files from within:

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;

    }

}

}

which is in an .as file which I assume somehow becomes the swf file. How would I go about this and 're-compile' the .as file?


回答1:


Let's compile those answers together for AS2 and AS3 using JS injection AND the ExternalInterface (both ways work in BOTH languages)

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

Notice that in AS2 and AS3 the ExternalInterface method is the exact same (ExternalInterface was introduced in Flash 8 for AS2). And in AS2 and AS3 the javascript injection method are the same except that it's navigateToURL instead of getURL, and the url string is wrapped in new URLRequest(), because it needs a URLRequest object. Also when using javascript injection, it's a good practice to set the target window to "_self" to avoid a new tab or window from opening.




回答2:


Also incase anyone in the future is looking at this question the Actionscript 3 version of altCognito's answer is like this:

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



回答3:


  getURL("javascript:displayPost(" + postId + "," + feedId +")");

From:

  • http://www.klynch.com/archives/000079.html

You can also look into the following:

http://osflash.org/projects/flashjs/tutorials/jstoas



来源:https://stackoverflow.com/questions/757390/actionscript-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!