2011-10-10 3 views
6

Допустим, у меня есть HTML-файл, который содержит форму:Входные elemnts в HTMLLoader только для чтения в Adobe AIR

<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); 
// ... 

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

+0

ли в HTML элементы формы, прекрасно работают (то есть принимать ввод с клавиатуры), если вы напрямую просматривать первый SWF (тот, который имеет HTMLLoader) (как основной SWF-файл приложения AIR), не загружая его в другой SWF? Если это так, то проблема, о которой вы говорили, выглядит как ошибка в AIR. – Ashutosh

+0

Работает ли ваше приложение в полноэкранном режиме? – weltraumpirat

+0

@Ashutosh: Да! – Jalal

ответ

0

Включен ли прикрепленный 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 documentation about handling HTML events упоминает об этом:

Когда слушатель относится к конкретному DOM элемента, это хорошая практика ждать родительского HTMLLoader к отправке полное событие перед добавлением слушателей событий. HTML-страницы часто загружают несколько файлов , а HTML DOM не полностью построен до тех пор, пока не будут загружены и проанализированы все файлы . HTMLLoader отправляет полное событие, когда все элементы были созданы.

Возможно, HTMLLoader присоединяется к стадии до того, как документ действительно готов, что может объяснить некоторые странности.

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

0

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

Вместо этого он работал с использованием состояния отображения FULL_SCREEN_INTERACTIVE. Согласно Adobe's documentation about FULL_SCREEN:

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

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

Хотя FULL_SCREEN_INTERACTIVE:

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

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

_stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE 
Смежные вопросы