3

我有一个 AS3 SWF,我将把其他 SWF 加载到其中。这些子 SWF 都采用 URL 上的单个参数。加载 AS2 孩子时,我似乎无法让它工作,它需要能够同时处理这两者。

所以我有

var request:URLRequest = new URLRequest();
var loader:URLLoader = new URLLoader();

request.url = "http://domain/as2.swf?param=foo";
loader.load(request);
// etc on to the eventListeners, addChild, etc

当 as2 SWF 被加载时,它看不到我传递给它的参数。它正在寻找 _root.param。我做错了还是在尝试不可能的事情?

编辑:我应该补充一点,我可以从 AS2 加载器加载带有这些 URL 参数的 SWF,它工作得很好。

4

5 回答 5

4

AS2 和 AS3 之间的通信并非易事,因为它们在不同的虚拟机中运行。检查此http://www.gskinner.com/blog/archives/2007/07/swfbridge_easie.html以获取一些提示。

编辑:如果您无法更改加载的 as2 内容,您唯一的选择是创建一个“包装器”as2 加载器,该加载器使用上面的链接示例与 as3 通信,并使用 _root.varname 与加载的 as2 内容进行接口这并不漂亮,但它可能只是工作。

于 2009-01-26T22:10:44.723 回答
0

在 SWF 加载之后但在将其添加到舞台之前,尝试动态分配变量可能是值得的。IE。

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, movieLoaded);

function movieLoadedHandler(event : Event) : void
{
    var loaderInfo : LoaderInfo = event.target as LoaderInfo;
    var clip : DisplayObject = loaderInfo.content;

    for each(var prop in varsToTransfer)
    {
        clip[prop] = varsToTransfer[prop];
    }

    // add to parent
}

让我知道情况如何。

于 2009-01-27T07:02:17.523 回答
0

AS3 -> AS3

电影 1(www.domain1.com):单击“购买”按钮时加载外部电影...

buy.addEventListener(MouseEvent.CLICK,function(){                   
    var ldr:Loader = new Loader();
    var url:String = "http://www.domain2.com/movie.swf?a=b&c=d";
    var urlReq:URLRequest = new URLRequest(url);
    ldr.load(urlReq);
    addChild(ldr);
    });

电影 2(http://www.domain2.com/movie.swf):

var mc:MovieClip = this as MovieClip;
var ldi:LoaderInfo = mc.loaderInfo;
var lobj:Object = ldi.parameters as Object;

for (var l in lobj) {
    dumper.htmlText += l+" => "+lobj[l]+"<br />";
}

“dumper”是位于 Movie2 中的动态文本框字段的名称。输出应如下所示:

a => b
c => d
于 2010-01-22T13:30:39.093 回答
0

而不是寻找 _root.param,使用 _root._url 然后手动解析出你的参数。

var url: String = _root._url;
var param: String = 'param=';
var paramStart: Number = url.lastIndexOf(param);
var paramValue: String = url.substring(paramStart + param.length, url.length);
trace(paramValue);

对于这样的事情,SWFBridge 非常棒而且矫枉过正。

于 2012-03-27T01:12:11.610 回答
-1

你这样做是不对的。

" http://domain/as2.swf?param=foo "

是对名为domain的服务器上名为as2.swf的文件的请求。当请求完成时,作为该 http 请求一部分的任何?param=foo参数都会丢失。如果服务器需要根据这些变量做某事,它会,但是你要求一个.swf文件来检测这些变量,这很愚蠢。

在 Flash 播放器的全局对象(全局命名空间)中放置一个变量,然后当 as2 .swf 加载到该 Flash 播放器中时,它将可以访问您在全局对象中设置的变量。

我不精通 as2,但是在 as3 中,可以在包级别使用this关键字访问 Global 对象(可能与 as2 相同,只是不用担心在包级别设置它)。

于 2009-01-26T21:47:05.223 回答