javascript - ActionScript + JavaScript

标签 javascript actionscript flash

我想从嵌入的 .swf 文件中调用 JavaScript 函数。具体来说,我想从内部调用我的一个外部链接的 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 文件?

最佳答案

让我们使用 JS 注入(inject)和外部接口(interface)(两种方式都适用于两种语言)为 AS2 和 AS3 一起编译这些答案

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 是在 AS2 的 Flash 8 中引入的)。并且在AS2和AS3中,javascript注入(inject)方法是相同的,只是它是navigateToURL而不是getURL,并且url字符串被包裹在new URLRequest()中,因为它需要一个URLRequest对象。此外,在使用 javascript 注入(inject)时,最好将目标窗口设置为“_self”以避免打开新选项卡或窗口。

关于javascript - ActionScript + JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757390/

相关文章:

javascript - 如何使用 ActionScript 或 Javascript 使页面上的其他 Flash 对象静音?

javascript - 在扩展图标上带有内容脚本的 Chrome 扩展

javascript - js异常位置

javascript - React 如何协同添加和删除工作?

apache-flex - 从 ActionScript 数组中删除所有元素的最佳方法?

flash - 按索引禁用 Spark 按钮栏按钮

flash - 是什么让 Silverlight 成为一项引人入胜且引人注目的技术?

javascript - 使用不同的 ID 多次将模板化的 div 添加到页面

php - 将 php $_GET 传递给 flash 播放器 xml 文件

html - 是否有标准的复制粘贴方法可以安全地将 SWF 放入网页中?