Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Обновление методов "на лету" (http://www.flasher.ru/forum/showthread.php?t=215693)

Sweet07 08.02.2019 00:53

Обновление методов "на лету"
 
Есть задача, чтоб определённые функции после запуска основного ПО можно было менять (код)
Подгрузка дополнительного кода происходит из внешних swf файлов.
Первичная загрузки при старте приложения проходит на ура: работают методы загруженной флешки, создание экземпляров объектов из библиотеки загруженной, обращение к переменным родительской и так далее.
Но вот засада: повторная загрузка изменённого файла загружаемой флешки не прёт. Методы и значения переменных в "загруженной " не меняются.

Основная
Код AS3:

var fnc:*
//...тут код загрузки файла. LoaderContext.allowCodeImport присвоено true
function loadedFnc(e:Event):void{
 if (fnc) fnc=null;
 fnc=e.target.content;
 trace(fnc.getVars(this))
}
 
function getParInfo():String{
  return "Parent swf. Running and cozy.";
}

В загружаемой флешке код примерно такой. Меняется id
Код AS3:

var par:*
var id:int=345;
function getVars(parnt:*):void{
 par=parnt;
 trace(par.getParInfo());
 trace("Loaded swf id =",id);
}

При загрузке обновлённой остаётся висеть старая...но при перезапуске основной - естественно подгружается обновлённая.

Кто уже пробовал копать в данной тематике?

Добавлено через 2 минуты
Загрузка происходит через File. Среда выполнения AIR

ZackMercury 08.02.2019 22:42

При загрузке нужно передавать в get запрос случайный аргумент, чтобы он не кешировался.
Например, это можно сделать добавлением к адресу флешки
Цитата:

+"?rand="+Math.random()
Здесь rand - любое имя.

Sweet07 16.02.2019 20:25

Не совсем понял про случайный аргумент.
ZackMercury, ты предлагаешь не заменять а загружать новые флешки с уникальным окончанием?
Поясни. Спасибо

Попробовал loader.UnloadAndStop(true) должен чистить кэш от прошлых данных.
Перед вызовом метода UnloadAndStop я сбрасываю значения переменных в загруженной флешке в null, чтоб дальше GarbageCollector доделал свою часть, но странно, ни то не то не помогло.

ZackMercury 16.02.2019 22:19

Я ничего не писал про новые флешки, только про запрос со случайным параметром.
Что пояснять, если я привёл пример

caseyryan 17.02.2019 19:58

Цитата:

Сообщение от Sweet07 (Сообщение 1206321)
Не совсем понял про случайный аргумент.
ZackMercury, ты предлагаешь не заменять а загружать новые флешки с уникальным окончанием?
Поясни. Спасибо

Попробовал loader.UnloadAndStop(true) должен чистить кэш от прошлых данных.
Перед вызовом метода UnloadAndStop я сбрасываю значения переменных в загруженной флешке в null, чтоб дальше GarbageCollector доделал свою часть, но странно, ни то не то не помогло.

А как ты вообще грузишь что-то? Из сети?
Зак тебе правильный пример привел. В URL, то, что идет после знака ? - это параметры. Просто передавай любой уникальный параметр, и браузер не будет кешировать запрос. Вернее, кешировать будет, но так как запрос каждый раз будет разный, то и ответ будет возвращаться не из кеша, а грузиться заново.
У тебя должно получиться что-то типа

Цитата:

example.com/flash.swf?rand=8798794587 // это число каждый раз меняй

Sweet07 17.02.2019 20:46

Да не. Теперь я понял к чему был такой ответ, спасибо, caseyryan, за пояснение. Неее, всё происходит локально. За обновление этих файлов у меня отвечает другое ПО (Яндекс диск - так удобнее), он уже самостоятельно ломится на свой сервер и оттуда закачивает обновлённые данные. Загружаемая флешка с функциями и библиотеками всегда в одном и том же месте. Загрузка происходит прямой ссылкой на локальный объект в выполняемую программу в среде AIR.

Добавлено через 1 минуту
Но совет обязательно применю когда дойду до разработки мобильного ПО

caseyryan 18.02.2019 10:05

В мобильном ПО это как раз не нужно. Этот фикс нужен для работы в браузере


Часовой пояс GMT +4, время: 12:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.