我想用JS调用别人开发的SWF里的一个方法,在网上找了一些方法都不成功,有高手懂吗?
下面是swf的代码,
package player_fla
{
...
    dynamic public class MainTimeline extends MovieClip
    {
      ....
        public function MainTimeline()
        {
            addFrameScript(0, frame1);
            return;
        }// end function        public function ncOnStatus(event:NetStatusEvent)
        {
            trace("nc: " + event.info.code + " (" + event.info.description + ")");
            if (event.info.code == "NetConnection.Connect.Success")
            {
                playLiveStream();
                videoLastW = 0;
                videoLastH = 0;
                videoObj.visible = true;
            }
            else if (event.info.code == "NetConnection.Connect.Failed")
            {
                prompt.text = "Connection failed: Try rtmp://[server-ip-address]:[port]/rtplive";
            }
            else if (event.info.code == "NetConnection.Connect.Rejected")
            {
                prompt.text = event.info.description;
            }
            return;
        }// end function        public function getPlayState()
        {
            return m_playstate;
        }// end function        public function nsOnStatus(event:NetStatusEvent)
        {
          ....
        }// end function        public function enterFullscreen(event:MouseEvent)
        {
         ...
        }// end function        public function doStop()
        {
            nsPlay.close();
            videoObj.clear();
            if (videoSizeTimer)
            {
                clearInterval(videoSizeTimer);
            }
            videoSizeTimer = 0;
            videoLastW = 0;
            videoLastH = 0;
            nsPlay = null;
            nc.close();
            nc = null;
            prompt.text = "";
            if (debugInterval != 0)
            {
                clearInterval(debugInterval);
            }
            debugInterval = 0;
            m_playstate = 0;
            return;
        }// end function        public function updateStreamValues()
        {
            var _loc_1:String = "";
            if (nsPlay != null)
            {
                _loc_1 = Math.round(nsPlay.currentFPS * 1000) / 1000 + " fps/" + Math.round(nsPlay.bufferLength * 1000) / 1000 + " secs";
            }
            return;
        }// end function        public function showMsg(param1)
        {
            prompt.visible = true;
            prompt.text = param1;
            return;
        }// end function        public function updateVideoSize()
        {
            var _loc_1:Number = NaN;
            var _loc_2:Number = NaN;
            videoObj.visible = true;
            return;
        }// end function        public function stageResize(event:Event) : void
        {
            backdrop.width = stage.stageWidth;
            backdrop.height = stage.stageHeight;
            prompt.y = stage.stageHeight - prompt.height;
            prompt.width = stage.stageWidth;
            saveStageW = stage.stageWidth;
            saveStageH = stage.stageHeight;
            saveVideoObjW = stage.stageWidth;
            saveVideoObjH = stage.stageHeight;
            videoObj.width = stage.stageWidth;
            videoObj.height = stage.stageHeight;
            return;
        }// end function        public function hideAllControls(param1:Boolean)
        {
            backdrop.visible = !param1;
            return;
        }// end function        public function enterLeaveFullscreen(event:FullScreenEvent)
        {
            trace("enterLeaveFullscreen: " + event.fullScreen);
            hideAllControls(event.fullScreen);
            if (!event.fullScreen)
            {
                stage.scaleMode = "noScale";
                videoObj.width = adjVideoObjW;
                videoObj.height = adjVideoObjH;
                videoObj.y = saveVideoObjY + saveVideoObjH - adjVideoObjH;
                videoObj.x = (saveStageW - adjVideoObjW) / 2;
            }
            return;
        }// end function        public function doPlay(param1, param2)
        {
            m_playstate = 1;
            m_server = param1;
            m_stream = param2;
            showMsg("准备播放...");
            nc = new NetConnection();
            nc.connect(m_server);
            nc.addEventListener(NetStatusEvent.NET_STATUS, ncOnStatus);
            return;
        }// end function        function frame1()
        {
            Security.allowDomain("*");
            nc = null;
            stageListener = new Object();
            videoSizeTimer = 0;
            videoLastW = 0;
            videoLastH = 0;
            fullscreenCapable = false;
            hardwareScaleCapable = false;
            debugInterval = 0;
            bufferTime = 3;
            m_playstate = 0;
            m_defaul_msg = "播放器就绪";
            ExternalInterface.addCallback("doPlay", doPlay);
            ExternalInterface.addCallback("doStop", doStop);
            ExternalInterface.addCallback("getPlayState", getPlayState);
            h264Capable = testVersion(9, 0, 115, 0);
            stage.addEventListener(FullScreenEvent.FULL_SCREEN, enterLeaveFullscreen);
            stage.addEventListener(Event.RESIZE, stageResize);
            saveVideoObjX = videoObj.x;
            saveVideoObjY = videoObj.y;
            saveStageW = stage.stageWidth;
            saveStageH = stage.stageHeight;
            var _loc_1:* = videoObj.width;
            saveVideoObjW = videoObj.width;
            adjVideoObjW = _loc_1;
            var _loc_1:* = videoObj.height;
            saveVideoObjH = videoObj.height;
            adjVideoObjH = _loc_1;
            videoObj.visible = false;
            fullscreenCapable = testVersion(9, 0, 28, 0);
            hardwareScaleCapable = testVersion(9, 0, 60, 0);
            stage.align = "TL";
            stage.scaleMode = "noScale";
            stageResize(null);
            return;
        }// end function        public function testVersion(param1:Number, param2:Number, param3:Number, param4:Number) : Boolean
        {
            var _loc_8:Number = NaN;
            var _loc_5:* = Capabilities.version;
            var _loc_6:* = Capabilities.version.indexOf(" ");
            _loc_5 = _loc_5.substr((_loc_6 + 1));
            var _loc_7:* = _loc_5.split(",");
            var _loc_9:Boolean = true;
            while (true)
            {
                
                if (Number(_loc_7[0]) < param1)
                {
                    _loc_9 = false;
                    break;
                }
                else if (Number(_loc_7[0]) > param1)
                {
                    break;
                }
                if (Number(_loc_7[1]) < param2)
                {
                    _loc_9 = false;
                    break;
                }
                else if (Number(_loc_7[1]) > param2)
                {
                    break;
                }
                if (Number(_loc_7[2]) < param3)
                {
                    _loc_9 = false;
                    break;
                }
                else if (Number(_loc_7[2]) > param3)
                {
                    break;
                }
                if (Number(_loc_7[3]) < param4)
                {
                    _loc_9 = false;
                    break;
                }
                break;
            }
            trace("testVersion: " + Capabilities.version + ">=" + param1 + "," + param2 + "," + param3 + "," + param4 + ": " + _loc_9);
            return _loc_9;
        }// end function        public function playLiveStream()
        {
            m_playstate = 2;
            nsPlay = new NetStream(nc);
            nsPlay.addEventListener(NetStatusEvent.NET_STATUS, nsOnStatus);
            var nsPlayClientObj:* = new Object();
            nsPlay.client = nsPlayClientObj;
            nsPlayClientObj.onMetaData = function (param1:Object)
            {
                var _loc_2:String = null;
                trace("onMetaData");
                for (_loc_2 in param1)
                {
                    
                    trace("  " + _loc_2 + " = " + param1[_loc_2]);
                }
                return;
            }// end function
            ;
            nsPlay.bufferTime = bufferTime;
            nsPlay.play(m_stream);
            videoObj.attachNetStream(nsPlay);
            m_playstate = 3;
            clearMsg();
            return;
        }// end function        public function clearMsg()
        {
            prompt.visible = false;
            prompt.text = "";
            return;
        }// end function    }
}
怎样用JS调用doPlay(),doStop(),getPlayState()这三个方法?

解决方案 »

  1.   

    js中声明的object,用它来调用as中使用ExternalInterface来声明的函数,是没有问题的。
    LZ实在做不出来,就参考SWFObject的代码吧。
      

  2.   

    同3楼,也就是你要在as中暴露接口给js
      

  3.   

    ExternalInterface.addCallback("doPlay", doPlay);
    ExternalInterface.addCallback("doStop", doStop);
    ExternalInterface.addCallback("getPlayState", getPlayState);添加类似的声明
      

  4.   

    另外,在页面嵌入flash的时候,需要加上允许脚本访问的属性:
    <object><param name="allowScriptAccess" value="sameDomain" /></object>
    <embed allowScriptAccess="sameDomain">如果是跨域加载的flash,sameDomain改成always
    <object><param name="allowScriptAccess" value="always" /></object>
    <embed allowScriptAccess="always">