Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.02.2019, 00:53
Sweet07 вне форума Посмотреть профиль Отправить личное сообщение для Sweet07 Найти все сообщения от Sweet07
  № 1  
Ответить с цитированием
Sweet07
 
Аватар для Sweet07

Регистрация: Jul 2011
Сообщений: 121
По умолчанию Обновление методов "на лету"

Есть задача, чтоб определённые функции после запуска основного ПО можно было менять (код)
Подгрузка дополнительного кода происходит из внешних 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
__________________
for (year=0;year<life;year++) {birthday(year)}

Старый 08.02.2019, 22:42
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 2  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
При загрузке нужно передавать в get запрос случайный аргумент, чтобы он не кешировался.
Например, это можно сделать добавлением к адресу флешки
Цитата:
+"?rand="+Math.random()
Здесь rand - любое имя.
__________________
There is no thing in this world that is not simple.

Старый 16.02.2019, 20:25
Sweet07 вне форума Посмотреть профиль Отправить личное сообщение для Sweet07 Найти все сообщения от Sweet07
  № 3  
Ответить с цитированием
Sweet07
 
Аватар для Sweet07

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

Попробовал loader.UnloadAndStop(true) должен чистить кэш от прошлых данных.
Перед вызовом метода UnloadAndStop я сбрасываю значения переменных в загруженной флешке в null, чтоб дальше GarbageCollector доделал свою часть, но странно, ни то не то не помогло.
__________________
for (year=0;year<life;year++) {birthday(year)}

Старый 16.02.2019, 22:19
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 4  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Я ничего не писал про новые флешки, только про запрос со случайным параметром.
Что пояснять, если я привёл пример
__________________
There is no thing in this world that is not simple.

Старый 17.02.2019, 19:58
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от Sweet07 Посмотреть сообщение
Не совсем понял про случайный аргумент.
ZackMercury, ты предлагаешь не заменять а загружать новые флешки с уникальным окончанием?
Поясни. Спасибо

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

Цитата:
example.com/flash.swf?rand=8798794587 // это число каждый раз меняй
__________________
Ко мне можно и нужно обращаться на ты)

Старый 17.02.2019, 20:46
Sweet07 вне форума Посмотреть профиль Отправить личное сообщение для Sweet07 Найти все сообщения от Sweet07
  № 6  
Ответить с цитированием
Sweet07
 
Аватар для Sweet07

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

Добавлено через 1 минуту
Но совет обязательно применю когда дойду до разработки мобильного ПО
__________________
for (year=0;year<life;year++) {birthday(year)}

Старый 18.02.2019, 10:05
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
В мобильном ПО это как раз не нужно. Этот фикс нужен для работы в браузере
__________________
Ко мне можно и нужно обращаться на ты)

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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