js 怎样调用AS

qing583538 2011-06-13 11:27:21
我想用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()这三个方法?
...全文
868 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DLUF 2011-08-16
  • 打赏
  • 举报
回复
为什么我的还是调不了呢,真是悲剧啊
diffmaker 2011-07-01
  • 打赏
  • 举报
回复
ExternalInterface.addCallback("doPlay", doPlay);
ExternalInterface.addCallback("doStop", doStop);
ExternalInterface.addCallback("getPlayState", getPlayState);

添加类似的声明
madpc 2011-07-01
  • 打赏
  • 举报
回复
同3楼,也就是你要在as中暴露接口给js
CaiKanXP 2011-07-01
  • 打赏
  • 举报
回复
另外,在页面嵌入flash的时候,需要加上允许脚本访问的属性:
<object><param name="allowScriptAccess" value="sameDomain" /></object>
<embed allowScriptAccess="sameDomain">

如果是跨域加载的flash,sameDomain改成always
<object><param name="allowScriptAccess" value="always" /></object>
<embed allowScriptAccess="always">
wern0565 2011-06-16
  • 打赏
  • 举报
回复
js中声明的object,用它来调用as中使用ExternalInterface来声明的函数,是没有问题的。
LZ实在做不出来,就参考SWFObject的代码吧。
Loop-break 2011-06-15
  • 打赏
  • 举报
回复
js不能调用AS
qing583538 2011-06-14
  • 打赏
  • 举报
回复
没有人做过吗,自己顶一下

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧