2015-03-02 50 views
0

我有一個非常奇怪的behiavour加載的SWF文件:其上的按鈕正在第一次加載,但如果我重新加載頁面,他們不工作了,即使我空我的緩存或強制SWF通過在URL末尾附加一個隨機參數來重新加載。這些按鈕是從init函數中調用的XML文件生成的。SWF加載的隨機行爲

這裏是我打電話給我的swf文件

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script 
<script type="text/javascript"> 
// <![CDATA[ 
window.onload=function(){ 
var _time = (new Date()).getTime(); 
var params = {wmode: "transparent", src: "http://www.mywebsite.com/sites/default/files/medias/map/monde.swf?" + _time}; 
var flashvars = {site: "/fr"}; 
swfobject.embedSWF("http://www.mywebsite.com/sites/default/files/medias/map/monde.swf?" + _time, "flashContent", 920, 450, "10", false, flashvars, params); 
}; 
// ]]> 
</script> 
<div id="flashContent">&nbsp;</div> 

獲得按鈕回來的唯一方法是編輯在Firebug的來源,一些隨機更改SWF文件的URL並改變回去,這樣的URL是再次裝載(它不是第一次嘗試,我必須在它工作之前做幾次)。

我沒有對SWF和我從AS3調用XML任何緩存,所以我不明白我怎麼能有這樣的隨機行爲:

Load order in Firebug

這裏是AS3腳本的相關部分:

private function init(e:Event = null):void 
{ 
    removeEventListener(Event.ADDED_TO_STAGE, init); 
    var site:String = ""; 
    if (this.loaderInfo.parameters.site != undefined) 
     site = this.loaderInfo.parameters.site; 

    _uLoader = new URLLoader(); 
    _uLoader.addEventListener(Event.COMPLETE, _initMap); 
    var httpHeader : URLRequestHeader = new URLRequestHeader("pragma", "no-cache"); 
    var httpRequest : URLRequest = new URLRequest(site+"/ajax/mywebsite_tools/list_master"); 
    httpRequest.requestHeaders.push(httpHeader); 
    httpRequest.method = URLRequestMethod.GET; 
    httpRequest.data = new URLVariables("time="+Number(new Date().getTime())); 
    _uLoader.load(httpRequest); 
    _supportContinent = new MovieClip(); 
    this.addChild(_supportContinent); 
} 

private function _initMap(e:Event):void 
{ 
    var cs:mywebsiteSingleton = mywebsiteSingleton.getInstance(); 
    var xml:XML = new XML(_uLoader.data); 
    cs.xml = xml; 

    btRetour.buttonMode = true; 
    btRetour.mouseChildren = false; 
    btRetour.txt.text = xml.retour.text(); 
    btRetour.gotoAndStop('OUT'); 

    addEventListener(mywebsiteEvent.CONTINENT_CLICK, _contientClick); 
    btRetour.addEventListener(MouseEvent.CLICK, _retourMonde); 
    btRetour.addEventListener(MouseEvent.ROLL_OVER, _over); 
    btRetour.addEventListener(MouseEvent.ROLL_OUT, _out); 
} 
+0

你所說的「他們不工作了」是什麼意思?他們是否可見?動畫的其他元素是否工作? – akmozo 2015-03-02 19:06:28

+0

按鈕是可見的,動畫的作品。點擊事件似乎不會觸發。 – vard 2015-03-03 08:22:57

+1

嘗試使用Flash Player調試版本,您可以在此找到(https://www.adobe.com/support/flashplayer/downloads.html)以查看是否有某些錯誤。 – akmozo 2015-03-03 11:55:57

回答

0

找出來了。實際上,這是相當微不足道的,在我的按鈕出現在時間線上之前或之後,_initMap()函數被隨機調用。所以如果我得到的xml速度太快,_initMap()函數嘗試引用一個不存在的按鈕。

的東西有點髒固定它,但無論如何,它的工作原理:

private function _initMap(e:Event):void 
{ 
    if(!btRetour || btRetour == null || !btRetour.hasOwnProperty("buttonMode")) { 
     setTimeout(_initMap, 500, e); 
     return; 
    } 
    // ... 
}