| AlexCooper |
26.11.2012 14:56 |
Помощь в организации дата-моста между двумя Loader swf
Здравствуйте.
Не пойму в чем суть моей ошибки.
Есть клип который грузит свф и передает ему данные. Так же в методе onComplete вешает листнер на событие. Подгружаемый клип генерирует событие но обрабатывается оно только в локальном тесте. При выгрузке на сервер передача данных из загрузчика в подгружаемый исполняется а событие не регистрирует.
Код AS3:
package {
import flash.net.*;
import flash.display.*;
import flash.events.*;
import flash.external.ExternalInterface;
import flash.utils.Timer;
public class Bridgework extends Sprite {
public var account:Object = new Object();
private var cache:Object = new Object();
private var frontend:*;
public var _loader:Loader;
public function Bridgework() {
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
if (ExternalInterface.available) {
try {
ExternalInterface.addCallback("take", takeAPI);
if (checkJavaScriptReady()) {
output.appendText("JavaScript is ready.\n");
} else {
var JSConnector:Timer = new Timer(100, 0);
JSConnector.addEventListener(TimerEvent.TIMER, timerHandler);
JSConnector.start();
}
} catch (error:SecurityError) {
output.appendText("A SecurityError occurred: " + error.message + "\n");
} catch (error:Error) {
output.appendText("An Error occurred: " + error.message + "\n");
}
} else {
output.appendText("External interface is not available for this container.");
}
// Test MODE
if (!ExternalInterface.call("window.location.href.toString")) {
var temp = new Object();
temp.user_id = 1;
temp.user_link = "";
temp.user_name = "";
temp.user_lastname = "";
temp.sex = "";
temp.birthday = "";
temp.vip_end = 0;
temp.is_payable = 0;
temp.city_id = 8;
temp.photo_box = "";
temp.photo_small = "";
temp.photo_big = "";
temp.city_name = "";
temp.photo_97 = "";
temp.slogan = "";
temp.photo_192 = "";
account.api = "fs";
setAccount(temp);
}
}
private function takeAPI($data:Object):void {
recurs($data);
account.api = $data.api;
switch ($data.command) {
case "authorizer": {
setAccount($data.data);
} break;
case "friendlist": {
setFriend($data.data);
}
}
}
private function setAccount($data:Object):void {
output.appendText("setAccount\n\n");
var valid = true;
switch (account.api) {
case "fs": {
account.uid = $data.user_id;
account.real_name = $data.user_name+" "+$data.user_lastname;
account.first_name = $data.user_name;
account.last_name = $data.user_lastname;
account.nick_name = account.real_name;
account.bday = $data.birthday;
account.bdate= $data.birthday.substring(0,4)+"."+$data.birthday.substring(5,7)+"."+$data.birthday.substring(8,10);
account.lday = StrToDate(account.bday);
account.age = getAge(account.lday);
account.sex = ($data.sex=="m") ? 1 : 0;
account.city = $data.city_name;
account.city_id = $data.city_id;
account.photo = $data.photo_box;
account.country = "";
account.country_id = 0;
} break;
default: valid = false;
}
account.sex_find = (account.sex==1) ? 0 : 1;
account.hidebday = true;
account.lang_app = "rus";
account.lang_my = "rus";
if (valid) {
recurs(account);
load("http://cite.com/multiapi/version0.66.swf?"+Math.random());
}
}
private function StrToDate(str:String):Date {
trace(str);
var year = Number(str.substring(0,4));
var mon = Number(str.substring(5,7))-1;
var day = Number(str.substring(8,10))+1;
return new Date(year,mon,day);
}
private function getAge(today:Date):Number {
var newYear:Date = new Date();
var todayTime:Number = today.time;
var newYearTime:Number = newYear.time;
var millisLeft:Number = newYearTime - todayTime;
var now = new Date(1900,00);
var before = new Date(now.setMilliseconds(millisLeft));
return before.getFullYear()-1900;
}
private function recurs($e:Object):void {
if (!cache.offset) cache.offset = 0;
cache.offset++;
var offset:String = " ";
for ( var i=0; i<=cache.offset; i++) {
offset+=">>";
}
for ( var data in $e) {
output.appendText(offset+" || "+data+" = "+$e[data]+"\n");
recurs($e[data]);
}
cache.offset--;
}
private function APIRequestion(e:Event):void {
if (cache.apiReq) {
output.appendText(cache.apiReq+"\n");
cache.apiReq = null;
}
}
private function gets(e:MouseEvent):void {
/*output.appendText("Call to API\n");
output.appendText("UserID: " + cache.appData + "\n");*/
for ( var item in cache.appData) {
output.appendText(item+" >> "+cache.appData[item]+" \n");
}
/*if (ExternalInterface.available) {
ExternalInterface.call("api","User.getFriends", {userIds:});
}*/
}
private function checkJavaScriptReady():Boolean {
var isReady:Boolean = ExternalInterface.call("isReady");
if (isReady) {
cache.appData = ExternalInterface.call("getAppData");
}
return isReady;
}
private function timerHandler(event:TimerEvent):void {
output.appendText("Checking JavaScript status..."+(new Date())+"\n");
var isReady:Boolean = checkJavaScriptReady();
if (isReady) {
output.appendText("JavaScript is ready.\n");
Timer(event.target).stop();
}
}
private function clickHandler(event:MouseEvent):void {
if (ExternalInterface.available) {
ExternalInterface.call("sendToJavaScript", input.text);
}
}
public function load(urlMain:String):void {
var url:URLRequest=new URLRequest(urlMain);
_loader = new Loader();
_loader.load(url);
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onLoading);
_loader.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
addChild(_loader);
}
private function uncaughtErrorHandler(event:UncaughtErrorEvent):void {
pre.height = 300;
if (event.error is Error) {
var error:Error = event.error as Error;
pre.text ="ERROR ****\n";
pre.appendText(String(error));
} else if (event.error is ErrorEvent) {
var errorEvent:ErrorEvent = event.error as ErrorEvent;
pre.text ="ERROR EVERT\n";
pre.appendText(String(error));
} else pre.text = "NON ERROR";
addChild(pre);
}
private function onLoading(e:ProgressEvent):void {
pre.text = e.bytesLoaded+" / "+e.bytesTotal;
}
private function onComplete(e:Event):void {
frontend = e.currentTarget.content;
frontend.setAccount(account);
if (cache.friend) frontend.setFriend;
frontend.addEventListener("APICALL", traceCall);
frontend.addEventListener("EVENT", traceEvent);
frontend.addEventListener("QUEST_API", questForApi);
frontend.addEventListener("INVITE_FRIEND", invite);
//addChild(frontend);
}
public function questForApi(e:Event):void {
trace("SET QUEST");
alpha-=.1;
switch (e.target.API.method) {
case "balanse": {
ExternalInterface.call("paySystem", e.target.API.data);
} break;
}
}
private function invite(e:Event):void {
ExternalInterface.call("invite");
}
private function traceEvent(e:Event):void {
trace("caller");
output.appendText("callerEve\n");
for ( var d in e.target.api) {
output.appendText(d+" >> "+e.target.api[d]+"\n");
}
if (ExternalInterface.available) {
ExternalInterface.call("apieve",e.target.api.method, e.target.api.param);
}
}
private function traceCall(e:Event):void {
trace("caller");
output.appendText("caller\n");
for ( var d in e.target.api) {
output.appendText(d+" >> "+e.target.api[d]+"\n");
}
if (ExternalInterface.available) {
ExternalInterface.call("api",e.target.api.method, e.target.api.param);
}
}
}
}
Код AS3:
public var API:Object = new Object();
......
Security.allowDomain("*");
......
private function CALL($m:String, $d:* ):void {
trace("Call");
trace("method :: "+$m+" = "+$d);
API.method = $m;
API.data = $d;
dispatchEvent(new Event("QUEST_API"));
}
.....
CALL("balanse", 1);
Хочу еще добавить что uncaughtErrorHandler регистрирует Error: Error #1502
И все это происходит только на удалённом хосте.
Добавлено через 7 минут
Думаю уже перейти на интерфейсы
Добавлено через 1 час 34 минуты
вопрос закрыт. Всего то на всего -> параметры публикации
|