ActionScript-as3如何获取页面中的动态参数

发布于 2016-11-15 18:36:39 字数 202 浏览 1100 评论 6

在制作flv播放器的过程中遇到一个问题,我想让播放器动态地获取页面的影片进行轮番播放。
方法如下:

embox/flv.swf?id="flid"

在AS3里可以这样去接收
var id:String=stage.loaderInfo.parameters["id"];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

虐人心 2017-10-31 00:54:08

这应该是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

清晨说ぺ晚安 2017-10-27 14:05:55

网页的动态参数要传入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", 参数名);

两种方法随便用哪种都行。

夜无邪 2017-06-04 00:53:45

将所需的数据id放入flashvars变量中,将flashvars变量作为swfobject.embedSWF()的参数,这样as3就可以用stage.loaderInfo.parameters["id"]来加载了。

灵芸 2017-05-23 18:24:52

你用stage.loaderInfo肯定不行啦,你得处理那个swf的loaderInfo才对啊。缘木求鱼是不行的诶...

泛泛之交 2017-05-12 04:54:48

@袁东辰 也可以尝试下这个方法

 public static function runJs(script:String):Object{
if(!ExternalInterface.available) return null;
return ExternalInterface.call("function(){"+script+"}");
}

灵芸 2017-04-15 09:33:53

其实还有一个奇技淫巧啦
写个cookie,让flash从cookie里读
代码就不贴了,嗯

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文