Входные элементы в HTMLLoader доступны только для чтения в Adobe AIR

#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