2011-10-10 5 views
6

Digamos que tengo un archivo HTML que contiene un formulario:elemnts entrada en HTMLLoader son de sólo lectura en Adobe AIR

<form method="post" action="url"> 
    <input type="text" id="fullname" /> 
    <input type="text" id="bodyText" /> 
    <input type="submit"> 
</form> 

tenemos carga el archivo HTML utilizando HTMLLoader dentro de un archivo SWF.

_htmlLoader = new HTMLLoader(); 
_htmlLoader.paintsDefaultBackground = false; 
var req:URLRequest = new URLRequest(urlValue); 
_htmlLoader.load(req); 
_stage.addChild(_htmlLoader); 

Después de cargar el archivo SWF utilizando Loader dentro de la aplicación principal, cuadros de texto son de sólo lectura y no se puede escribir en él. Pero podemos cambiar el enfoque de ellos usando Mouse.

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

¿Cuál es el problema?

+0

¿Los elementos de formulario HTML funcionan bien (es decir, aceptar la entrada del teclado) si ve directamente el primer SWF (el que tiene la HTMLLoader) (como un SWF principal de una aplicación de AIR) sin cargarlo dentro de otro SWF? Si es así, entonces el problema que mencionas parece un error en AIR. – Ashutosh

+0

¿Su aplicación se ejecuta en modo pantalla completa? – weltraumpirat

+0

@Ashutosh: ¡Sí! – Jalal

Respuesta

0

¿Se está adjuntando el HTMLLoader después de que se haya activado el evento Event.COMPLETE? Incluso puede valer la pena esperar a que el documento de HTMLLoader active un evento DOMReady antes de conectarlo al escenario.

intentar algo como esto:

_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); } 

El Flex documentation about handling HTML events menciona esto:

Cuando un oyente se refiere a un elemento DOM específica, es una buena práctica que esperar a la HTMLLoader padre para el envío el evento completo antes de agregar los detectores de eventos. Las páginas HTML a menudo cargan múltiples archivos y el HTML DOM no está completamente desarrollado hasta que todos los archivos estén cargados y analizados. HTMLLoader distribuye el evento completo cuando se han creado todos los elementos.

Es posible que HTMLLoader se adjunte a la etapa antes de que el documento esté realmente listo, lo que puede explicar algunas de las rarezas.

Si usted tiene más información que podría ser una ayuda increíble ...

0

La solución propuesta ("esperar el evento DOMContentLoaded antes addChild") no funcionó para mí.

En su lugar funcionó utilizando el estado de visualización FULL_SCREEN_INTERACTIVE. Según Adobe's documentation about FULL_SCREEN:

"interactividad teclado está habilitada para dispositivos móviles"

(supongo que es que es de otros perfiles de discapacidad como de escritorio).

Mientras FULL_SCREEN_INTERACTIVE:

Especifica que el escenario está en modo de pantalla completa con interactividad teclado activado. A partir de Flash Player 11.3, esta capacidad es compatible tanto con aplicaciones de AIR como con aplicaciones basadas en navegador.

Así que en mi caso, la solución fue:

_stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE 
Cuestiones relacionadas