これは何かおかしい...
外部 SWF をロードする Flash ファイルがあります。そこで、LoadVars を使用してサーバーから外部データを取得します。データが到着したら、setInterval を使用して、コンテンツをフェードインする関数を呼び出します。
ここまでは順調ですね。
しかし、すべてのデータが到着する前にメニューを切り替えると (つまり、あるムービーをアンロードして別のムービーをロードする)、Flash が約 15 秒間ハングし、悪名高いメッセージ「このムービーのスクリプトが Flash をスローダウンさせています - 中止しますか?」が表示されます。それ?" (大まかに翻訳)。
大きな問題を引き起こす SWF に «onUnload» 関数を追加しました。ここでは、clearInterval を使用してインターバルを取り除き、LoadVars-Variable を再インスタンス化します。
何も役に立たない...
何か案は?
リクエストに応じて-問題を引き起こしているSWFのソースは次のとおりです。
var myTimer = null;
var server_send:LoadVars = new LoadVars();
this.onUnload = function () {
clearInterval(myTimer);
server_send = new LoadVars();
trace("stopping gewerbe");
};
var myself = scrollContent;
import JSON; // external Class for parsing JSON
var sRes:LoadVars = new LoadVars();
function fadeIn(which){
which._alpha += 3;
if(which._alpha >= 100){
clearInterval(myTimer);
}
}
sRes.onLoad = function(success:Boolean){
if (success){
var o:Object = JSON.parse(sRes.res);
var s:String = JSON.stringify(o);
//trace(sRes.res);
var y = 0;
for(item in o){
actCol = 0;
myself.attachMovie("row", "entry" + item, myself.getNextHighestDepth(), {_x: 0, _y:y});
var tr = myself["entry" + item];
tr.cTitle = o[item]["title"];
tr.cBild = o[item]["image"];
tr.cText = o[item]["text"];
y += 65;
}
myTimer = setInterval(fadeIn, 0.1, myself);
_root.myIntervals.push(myTimer);
}
else
{
trace("no connection...");
}
}
myself._alpha = 0;
var vars = Array("id");
var values = Array("3");
server_send.load('void.txt');
for(var i=0;i<vars.length;i++)
{
server_send[vars[i]] = escape(values[i]);
}
server_send.sendAndLoad(_global.server, sRes, "POST");
stop();