Actionscript + Javascript - PullRequest
       7

Actionscript + Javascript

1 голос
/ 16 апреля 2009

Я хотел бы вызвать функцию javascript из встроенного файла .swf. В частности, я хотел бы вызвать функцию в одном из моих внешних 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;

    }

}

}

, который находится в файле .as, который, как я предполагаю, каким-то образом становится файлом SWF. Как мне поступить и «перекомпилировать» файл .as?

Ответы [ 3 ]

7 голосов
/ 17 апреля 2009

Давайте скомпилируем эти ответы вместе для AS2 и AS3, используя инъекцию JS И ExternalInterface (оба способа работают на обоих языках)

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

Обратите внимание, что в AS2 и AS3 метод ExternalInterface точно такой же (ExternalInterface был введен в Flash 8 для AS2). И в AS2, и в AS3 метод внедрения javascript одинаков, за исключением того, что он является navigateToURL вместо getURL, а строка URL-адреса заключена в новый URLRequest (), поскольку для него требуется объект URLRequest. Также при использовании внедрения javascript хорошей практикой является установка целевого окна на «_self», чтобы не открывать новую вкладку или окно.

3 голосов
/ 16 апреля 2009

Также, если кто-нибудь в будущем будет смотреть на этот вопрос, версия ActionScript 3 ответа altCognito выглядит так:

ExternalInterface.call("displayPost",postId,feedId);
2 голосов
/ 16 апреля 2009
  getURL("javascript:displayPost(" + postId + "," + feedId +")");

От:

Вы также можете посмотреть следующее:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...