Actionscript 3 URL请求多个SWF链接无法正常工作
我试着在3个不同的容器中装载3个不同的股票。 删除此行时:Actionscript 3 URL请求多个SWF链接无法正常工作,actionscript-3,apache-flex,flash,Actionscript 3,Apache 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&c
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¤cy=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¤cy=eur"));
并分别加载它们,它们工作正常:
但当我把它们放在一起时,就像adobe中写的那样,所有三个代码都显示相同的数字:
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¤cy=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¤cy=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¤cy=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);
}
}
}
public类importExternalSWF扩展了MovieClip{
公共函数importExternalSWF(){
变量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:编号=50;
var tickerWidth:Number=50;
loadURL();
函数loadUrls():void{
对于(var i:uint=0;i我怀疑外部SWF文件在根级别设置了一些变量。因此,每次加载都将覆盖以前的值,并且最终在所有“ticker”中得到相同的分数
通过将每个SWF加载到其自己的应用程序域
,很可能可以解决此干扰。默认情况下,SWF加载到同一个应用程序域并共享其代码
因此,与其这样做,不如:
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);
我有个坏消息,我尝试了所有方法,但是我无法正确加载swf文件。因此,我开始研究这个问题,我发现,首先,您的swf具有AVM1Movie格式(new_jackpot.swf),因此,我得出结论,这个swf是使用ActionScript的1或2版创建的。如果您看到AVM1Movie类的参考(这里是,说:
由AVM2 SWF文件加载的AVM1 SWF文件有几个限制:
- 由AVM2 SWF文件加载的AVM1 SWF文件无法将另一个SWF文件加载到此文件中。也就是说,它无法在自身上加载另一个SWF文件。但是,由此SWF文件加载的子精灵对象、MovieClip对象或其他AVM1 SWF文件可以加载到此文件中。
然后,我也尝试使用一个在Flex中实现线程的库,发现了以下内容(这里是链接):
- Flash Player中的Actionscript虚拟机(AVM)由于只有一个线程而受到严重限制…
我已经使用Loader、SWFLoader、ByteArray等创建了几个项目,所有这些都是在Flex SDK 3.2的actionscript 3中完成的。
如果您在以前的版本中创建此项目,或者尝试使用实现线程的同一个库,则可能会成功
无论如何,如果我找到了更多内容,我将使用另一个正确的解决方案编辑此答案。尝试在以下位置的«laoder»后添加1:
private var loader:Loader = new Loader();
由于提供股票报价器的第三方公司缺乏兼容性,因此无法解决此问题。参数“para”对SWF有影响吗?我认为您不能直接将参数传递给SWF。为什么要传递参数“para”两次?SWF必须有参数才能正常工作。正如您在im中看到的年龄,它的工作,但只有单独的。当它在一起,最后一个链接覆盖以前的URL加载。其余的代码看起来如何?你如何处理加载完成?除了单击侦听器,这是我得到的所有。在看了很多教程后,没有注意到任何关于完成处理程序的说明,如果我是其中之一,请(我:)您是否尝试使用Charles并查看是否实际发送了3个请求?您是否比较了loaderInfo
?这就是我的想法,我将在明天早上尝试并更新。非常感谢。由于某些原因,它不起作用,结果是相同的,但它必须是一个方向良好的信息。对于asker来说,实现这样的请求似乎更简单自动售票机/柜台。谢谢你提供的信息。我会尝试这些建议。@bummzack我曾想过这样做,但“自动售票机”是由第三方公司提供的,我们无法访问他们的数据。你可以看到我几天前写的编辑,我当时重写了代码
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¤cy=eur"));