ActionScript-as3如何获取页面中的动态参数
在制作flv播放器的过程中遇到一个问题,我想让播放器动态地获取页面的影片进行轮番播放。
方法如下:
embox/flv.swf?id="flid"
在AS3里可以这样去接收
var id:String=stage.loaderInfo.parameters["id"];
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这应该是AS3的参数通信问题,具体不知道哪个环节出了错误,这种方式只能是单边一次性传值,而且只能接收字符串。
建议使用外部通信接口ExternalInterface,大家都说这是最可靠的通信方式。
JS调用AS3的函数
确定JS调用AS3之前,要在AS3中绑定调用函数,也就是说,只有AS3答应给的方法JS才能调用.
使用:ExternalInterface.addCallback(functionName:String, closure:Function):void有两个参数:
functionName:String — 容器可用于调用函数的名称。
closure:Function — 要调用的 closure 函数。
ExternalInterface.addCallback("getASVars",getASFun);
private function getASFun(value:String):void {
//得到JS传来的值:value
}
现在可以在JS中去调用这个方法了,调用前还要先取得插进HTML的SWF的ID(这个你之前已经取到了,应该不是难点)。
function thisflv(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
thisflv("flid").getASVars(value);
AS3调用JS的函数
使用:ExternalInterface.call(functionName:String, … arguments):*
这个方法有两个参数:
functionName:String — 要在容器中调用的函数的名称。
… arguments — 传递到容器中的函数的参数。 您可以指定零个或多个参数,参数之间用逗号分隔。 这些参数可以是任何 ActionScript 数据类型。 当调用 JavaScript 函数时,ActionScript 类型自动封装到 JavaScript 类型中;当调用其它某个 ActiveX 容器时,将在请求消息中对参数进行编码。
得说明一下,这种外部通信接口ExternalInterface只使用下面的情况:
Internet Explorer 5.0 及更高版本 Windows
Netscape 8.0 及更高版本 Windows Macintosh
Mozilla 1.7.5 及更高版本 Windows Macintosh
Firefox 1.0 及更高版本 Windows Macintosh
Safari 1.3 及更高版本 Macintosh
网页的动态参数要传入swf有两个方法:
1、直接在嵌入的时候*.swf?参数=值
2、通过swf来调用容器页面中的js
方法一详解:
对于第一种方法,你可以通过js取到参数然后在加载之前写到*.swf后面。比如:
//js取地址栏
//更多代码
function geturlparam(item)
{
var svalue = location.search.match(new RegExp("[?&]" + item + "=([^&]*)(&?)","i"));
return svalue ? svalue[1] : svalue;
}
……
//嵌入方式
embox/flv.swf?id=geturlparam('id');
//在AS3里可以这样去接收
var id:String=stage.loaderInfo.parameters["id"];
方法二详解:
在网页容器中准备一个js取值的方法提供给AS调用,例如:
//js代码
function getjsparam(param)
{
//具体取值代码
return 取到的值;
}
然后在嵌入的时候需要有一行,允许as使用js的设置:
<param name="allowScriptAccess" value="always" />
AS中需要用到js的时候,使用:
ExternalInterface.call("getjsparam", 参数名);
两种方法随便用哪种都行。
将所需的数据id放入flashvars变量中,将flashvars变量作为swfobject.embedSWF()的参数,这样as3就可以用stage.loaderInfo.parameters["id"]来加载了。
你用stage.loaderInfo肯定不行啦,你得处理那个swf的loaderInfo才对啊。缘木求鱼是不行的诶...
@袁东辰 也可以尝试下这个方法
public static function runJs(script:String):Object{
if(!ExternalInterface.available) return null;
return ExternalInterface.call("function(){"+script+"}");
}
其实还有一个奇技淫巧啦
写个cookie,让flash从cookie里读
代码就不贴了,嗯