URLRequest多个SWF链接无法正常工作

时间:2013-07-22 12:20:05

标签: actionscript-3 flex flash

我正在尝试在3个不同的容器中加载3种不同的代码。 当我删除这一行时:

 loader2.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=bl&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));
 loader3.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=bl&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));

并单独加载它们可以正常工作:

enter image description here

但是当我将它们加载到一起时,就像在adobe中写入this document一样,所有三个代码都显示相同的数字:

enter image description here

package  {    
import flash.display.MovieClip;
import flash.net.URLRequest;
import flash.display.Loader;


public class importExternalSWF extends MovieClip {
    private var loader:Loader = new Loader();
    private var loader2:Loader = new Loader();
    private var loader3:Loader = new Loader();

    public function importExternalSWF() {
        loader.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=mrj-4&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));
        loader2.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=bl&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));
        loader3.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=grel&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));

        ticker1.addChild(loader);
        ticker1.width=50;
        ticker1.height=20;

        ticker2.addChild(loader2);
        ticker2.width=50;
        ticker2.height=20;

        ticker3.addChild(loader3);
        ticker3.width=50;
        ticker3.height=20;      
        }
    }
}

我无法在任何地方找到解决方案

由于

编辑 我将我的代码重写为此,并且它仍然是相同的结果

public class importExternalSWF extends MovieClip {

    public function importExternalSWF() {

        var url = "http://tickers.playtech.com/jackpots/new_jackpot.swf";
        var urlParams:Array = ["grel", "bl", "game=mrj-4"];
        var tickers:Array = [ticker1, ticker2, ticker3];
        var tickerHeight:Number = 50;
        var tickerWidth:Number = 50;

        loadUrls();

        function loadUrls():void {

            for(var i:uint = 0; i<urlParams.length; i++)
            {
                var urlLoader = new Loader();
                var flashvars:URLVariables = new URLVariables();
                flashvars["casino"] = "cityclub";
                flashvars["info"] = "1";
                flashvars["game"] = urlParams[i];
                flashvars["currency"] = "eur";
                flashvars["font_face"] = "arial";
                flashvars["bold"] = "true";
                flashvars["font_size"] = "10";
                flashvars["bg_color"] = "0x000000";
                flashvars["font_color"] = "ffffff";

                var request:URLRequest = new URLRequest(url);
                request.data = flashvars;
                urlLoader.load(request);

                tickers[i].width=tickerWidth;
                tickers[i].height=tickerHeight;
                tickers[i].addChild(urlLoader);
            }
        }
    }

4 个答案:

答案 0 :(得分:3)

我怀疑外部SWF文件在根级别设置了一些变量。因此,每个加载都将覆盖以前的值,并且您将在所有“代码”中得到相同的分数。

最有可能通过将每个SWF加载到自己的ApplicationDomain中来解决这种干扰。默认情况下,SWF正在加载到同一ApplicationDomain并共享其代码。

所以不要这样做:

urlLoader.load(request);

你应该这样做:

// create a new LoaderContext with a spearate ApplicationDomain
var context:LoaderContext = new LoaderContext(false, new ApplicationDomain());

// load the request and use the context with the separate ApplicationDomain
urlLoader.load(request, context);

答案 1 :(得分:3)

我有坏消息,我尝试了一切,但我无法正确加载swf文件。所以,我已经开始调查这个,我发现,首先,你的SWF有AVM1Movie格式(new_jackpot.swf),所以,我得出结论,这个SWF是用ActionScript版本1或2创建的。如果您看到 AVM1Movie 类(此处为link)的引用,请说明以下内容:

AVM2 SWF文件加载的AVM1 SWF文件有几个限制:

  • 由AVM2 SWF文件加载的AVM1 SWF文件无法将另一个SWF文件加载到此文件中。也就是说,它无法在自身上加载另一个SWF文件。但是,此SWF文件加载的子Sprite对象,MovieClip对象或其他AVM1 SWF文件可以加载到此文件中。

然后,我也尝试了一个在Flex中实现Threads的库,并找到了这个(这里是这个链接async-threading):

  • Flash Player中的Actionscript虚拟机(AVM)受到一个线程的严重限制......

我使用Loader,SWFLoaders,ByteArrays等创建了几个项目,所有这些都在Flex SDK 3.2的actionscript 3中完成。 也许如果你在以前的版本中创建这个项目可以工作,或者尝试使用实现线程的相同库。

无论如何,如果我发现更多内容,将使用另一种正确的解决方案编辑此答案。

答案 2 :(得分:2)

尝试在这些地方添加1个“laoder”之后:

private var loader:Loader = new Loader();


loader.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=mrj-4&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));

答案 3 :(得分:0)

由于提供代码的第三方公司缺乏兼容性,因此无法解决此问题。