#html #actionscript-3 #air #loader
#HTML #actionscript-3 #air #загрузчик
Вопрос:
Допустим, у меня есть HTML-файл, содержащий форму:
<form method="post" action="url">
<input type="text" id="fullname" />
<input type="text" id="bodyText" />
<input type="submit">
</form>
мы загрузили этот HTML-файл, используя HTMLLoader
внутри swf-файла.
_htmlLoader = new HTMLLoader();
_htmlLoader.paintsDefaultBackground = false;
var req:URLRequest = new URLRequest(urlValue);
_htmlLoader.load(req);
_stage.addChild(_htmlLoader);
После загрузки этого Swf-файла с помощью Loader
inside main application текстовые поля доступны только для чтения и не могут быть введены в него.
Но мы можем изменить их фокус с помощью мыши.
var loader1:Loader = new Loader();
loader1.load(new URLRequest("path to file.swf"));
// ...
this.addChild(loader1);
// ...
В чем проблема?
Комментарии:
1. Нормально ли работают элементы HTML-формы (т. Е. Принимают ввод с клавиатуры), если вы напрямую просматриваете первый SWF-файл (тот, в котором есть HTMLLoader) (как основной SWF-файл приложения AIR), не загружая его в другой SWF-файл? Если это так, то упомянутая вами проблема выглядит как ошибка в AIR.
2. Работает ли ваше приложение в полноэкранном режиме?
Ответ №1:
Подключается ли HTMLLoader после запуска Event.COMPLETE
события? Возможно, даже стоит подождать, пока документ HTMLLoader запустит событие DOMReady, прежде чем присоединять его к сцене.
Попробуйте что-то вроде этого:
_htmlLoader = new HTMLLoader();
_htmlLoader.paintsDefaultBackground = false;
var urlRequest:URLRequest = new URLRequest(urlRequest);
_htmlLoader.addEventListener(Event.COMPLETE, completeHandler);
_htmlLoader.load(urlRequest);
function completeHandler(event:Event):void { _htmlLoader.window.document.addEventListener("DOMContentLoaded", readyHandler); }
function readyHandler(event:Event):void { _stage.addChild(_htmlLoader); }
В документации Flex об обработке событий HTML упоминается об этом:
Когда прослушиватель ссылается на определенный элемент DOM, рекомендуется дождаться, пока родительский HTMLLoader отправит полное событие, прежде чем добавлять прослушиватели событий. HTML-страницы часто загружают несколько файлов, и HTML DOM не будет полностью собран, пока все файлы не будут загружены и проанализированы. HTMLLoader отправляет полное событие, когда все элементы созданы.
Возможно, что HTMLLoader подключается за этап до того, как документ действительно готов, что может объяснить некоторые странности.
Если у вас есть дополнительная информация, это было бы отличной помощью…
Ответ №2:
Предложенное решение («дождитесь DOMContentLoaded
события раньше addChild
«) не сработало для меня.
Вместо этого он работал с использованием состояния FULL_SCREEN_INTERACTIVE
отображения. Согласно документации Adobe о FULL_SCREEN
:
«интерактивность клавиатуры включена для мобильных устройств»
(Я предполагаю, что это отключило другие профили, такие как Desktop).
В то время как FULL_SCREEN_INTERACTIVE
:
Указывает, что сцена находится в полноэкранном режиме с включенной интерактивностью клавиатуры. Начиная с версии Flash Player 11.3, эта возможность поддерживается как в приложениях AIR, так и в приложениях на основе браузера.
Итак, в моем случае решение было:
_stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE