Входные элементы в HTMLLoader только для чтения в Adobe AIR - PullRequest
6 голосов
/ 10 октября 2011

Допустим, у меня есть 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 внутри основного приложения текстовые поля доступны только для чтения и не могут вводить его.Но мы можем изменить их фокус с помощью мыши.

var loader1:Loader = new Loader();
loader1.load(new URLRequest("path to file.swf"));
// ...
this.addChild(loader1);
// ...

В чем проблема?

Ответы [ 2 ]

0 голосов
/ 29 марта 2017

Предлагаемое решение ( "подождать события DOMContentLoaded до addChild" ) не сработало для меня.

Вместо этого он работал, используя состояние отображения FULL_SCREEN_INTERACTIVE.В соответствии с документацией Adobe о FULL_SCREEN:

"интерактивность клавиатуры включена для мобильных устройств"

(я полагаю, это отключено, другие профиликак рабочий стол).

Пока FULL_SCREEN_INTERACTIVE:

Указывает, что рабочая область находится в полноэкранном режиме с включенной интерактивной клавиатурой .Начиная с Flash Player 11.3, эта возможность поддерживается как в приложениях AIR, так и в приложениях на основе браузера.

Так что в моем случае решение было:

_stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE
0 голосов
/ 29 декабря 2011

Подключается ли 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 присоединяется к этапу до того, как документ действительно готов, что может объяснить некоторые странности.

Если у вас есть какая-либо дополнительная информация, которая будет очень полезна ...

...