2011-10-10 5 views
6

Diciamo che ho un file HTML che contiene un modulo:elemnts di ingresso in HTMLLoader sono di sola lettura in Adobe AIR

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

dobbiamo caricare questo file html utilizzando HTMLLoader all'interno di un file SWF.

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

Dopo aver caricato il file SWF utilizzando Loader all'interno dell'applicazione principale, le caselle di testo sono di sola lettura e non è possibile digitare in esso. Ma possiamo cambiarne il focus usando il Mouse.

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

Qual è il problema?

+0

fare gli elementi del modulo HTML funzionano bene (cioè accettare input da tastiera) se si visualizza direttamente il primo file SWF (quello che ha il HTMLLoader) (come un SWF principale dell'applicazione AIR) senza caricarlo in un altro SWF? Se è così, allora il problema che hai menzionato sembra un bug in AIR. – Ashutosh

+0

L'applicazione funziona in modalità schermo intero? – weltraumpirat

+0

@Ashutosh: Sì! – Jalal

risposta

0

L'HTMLLoader è stato collegato dopo l'attivazione dell'evento Event.COMPLETE? Potrebbe anche valere la pena aspettare che il documento di HTMLLoader attivi un evento DOMReady prima di collegarlo allo stage.

provare qualcosa di simile:

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

Il Flex documentation about handling HTML events cita questo:

Quando un ascoltatore si riferisce ad un elemento DOM specifico, è buona pratica per aspettare il HTMLLoader genitore di spedizione l'evento completo prima di aggiungere i listener di eventi. Le pagine HTML caricano spesso più file e il DOM HTML non è completamente compilato finché tutti i file non sono stati caricati e analizzati . HTMLLoader invia l'evento completo quando tutti gli elementi sono stati creati.

Potrebbe essere possibile che HTMLLoader sia collegato allo stage prima che il documento sia effettivamente pronto, il che potrebbe spiegare alcune delle stranezze.

Se avete ulteriori informazioni che potrebbero essere un aiuto impressionante ...

0

La soluzione proposta ("attendere l'evento DOMContentLoaded prima addChild") non ha funzionato per me.

Invece ha funzionato utilizzando lo stato di visualizzazione FULL_SCREEN_INTERACTIVE. Secondo Adobe's documentation about FULL_SCREEN:

"interattività tastiera è abilitata per i dispositivi mobili"

(Credo che sia che sia diversamente abili altri profili come desktop).

Mentre FULL_SCREEN_INTERACTIVE:

Specifica che lo stage è in modalità a schermo intero interattività con la tastiera abilitato. A partire da Flash Player 11.3, questa funzionalità è supportata sia nelle applicazioni AIR che nelle applicazioni basate su browser.

Così nel mio caso la soluzione è stata:

_stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE