Informazioni sulla classe HTMLLoader

Adobe AIR 1.0 e versioni successive

La classe HTMLLoader di Adobe AIR definisce l'oggetto di visualizzazione che può mostrare il contenuto HTML in un'applicazione AIR. Le applicazioni basate su SWF possono aggiungere un controllo HTMLLoader a una finestra esistente o creare una finestra HTML che contenga automaticamente un oggetto HTMLLoader con HTMLLoader.createRootWindow() . È possibile accedere all'oggetto HTMLLoader tramite la proprietà JavaScript window.htmlLoader dalla pagina HTML caricata.

Caricamento di contenuto HTML da un URL

Il codice riportato di seguito carica un URL in un oggetto HTMLLoader (aggiungete HTMLLoader come elemento secondario di stage o di un altro contenitore di oggetti di visualizzazione per visualizzare il contenuto HTML nella vostra applicazione):

import flash.html.HTMLLoader; 
 
var html:HTMLLoader = new HTMLLoader; 
html.width = 400; 
html.height = 600; 
var urlReq:URLRequest = new URLRequest("http://www.adobe.com/"); 
html.load(urlReq);

Per impostazione predefinita, le proprietà width e height di un oggetto HTMLLoader sono entrambe impostate su 0. Quando aggiungete un oggetto HTMLLoader allo stage, potete modificare tali dimensioni. Durante il caricamento di un pagina, l'oggetto HTMLLoader invia vari eventi che consentono di determinare quando l'interazione con la pagina caricata è sicura. Questi eventi sono descritti in Gestione di eventi relativi a HTML in AIR .

Nota: nel framework Flex, solo le classi che estendono la classe UIComponent possono essere aggiunte come classi secondarie ai componenti Flex Container. Per questa ragione, non potete aggiungere direttamente HTMLLoader come classe secondaria di un componente Flex Container. Potete tuttavia usare il controllo Flex mx:HTML, creare una classe personalizzata che estenda UIComponent e contenga HTMLLoader come classe secondaria di UIComponent o aggiungere HTMLLoader come classe secondaria di UIComponent e aggiungere UIComponent al contenitore Flex.

Potete anche eseguire il rendering del testo HTML usando la classe TextField, sebbene questa abbia funzionalità limitate. La classe TextField di Adobe® Flash® Player supporta un sottoinsieme del codice HTML, ma a causa di limitazioni dimensionali, le sue funzionalità sono limitate (la classe HTMLLoader inclusa in Adobe AIR non è disponibile in Flash Player).

Caricamento di contenuto HTML da una stringa

Il metodo loadString() di un oggetto HTMLLoader carica una stringa di contenuto HTML nell'oggetto HTMLLoader:

var html:HTMLLoader = new HTMLLoader(); 
var htmlStr:String = "<html><body>Hello <b>world</b>.</body></html>"; 
html.loadString(htmlStr);

Per impostazione predefinita, il contenuto caricato tramite il metodo loadString() viene inserito in una sandbox non dell'applicazione con le seguenti caratteristiche:

  • Dispone dell'accesso per caricare il contenuto dalla rete (ma non dal file system).

  • Non può caricare dati usando XMLHttpRequest.

  • La proprietà window.location è impostata su "about:blank" .

  • Il contenuto non può accedere alla proprietà window.runtime (come invece può fare il contenuto in qualsiasi sandbox non dell'applicazione).

In AIR 1.5, la classe HTMLLoader include una proprietà placeLoadStringContentInApplicationSandbox . Quando questa proprietà è impostata su true per un oggetto HTMLLoader, il contenuto caricato tramite il metodo loadString() viene inserito nella sandbox dell'applicazione. (Il valore predefinito è false .) In questo modo il contenuto caricato tramite il metodo loadString() può accedere alla proprietà window.runtime e a tutte le API di AIR. Se impostate questa proprietà su true , accertatevi che l'origine dati per una stringa usata in una chiamata al metodo loadString() sia attendibile. Quando questa proprietà è impostata su true , le istruzioni del codice nella stringa HTML vengono eseguite con tutti i privilegi dell'applicazione. Impostate questa proprietà su true quando siete certi che la stringa non può contenere codice dannoso.

Nelle applicazioni compilate con l'SDK di AIR 1.0 o di AIR 1.1, il contenuto caricato tramite il metodo loadString() viene inserito nella sandbox dell'applicazione.

Importanti regole di sicurezza per l'uso del codice HTML nelle applicazioni AIR

I file che installate con l'applicazione AIR hanno accesso alle API di AIR. Per ragioni di sicurezza, ciò non vale per il contenuto proveniente da altre origini. Ad esempio, questa limitazione impedisce al contenuto di un dominio remoto (ad esempio, http://example.com) di leggere il contenuto della directory Desktop dell'utente o effettuare attività più dannose.

Poiché esistono falle nella sicurezza che possono essere sfruttate attraverso una chiamata alla funzione eval() (e API correlate), per impostazione predefinita il contenuto installato con l'applicazione ha limitazioni relativamente all'impiego di tali metodi. Tuttavia alcuni framework Ajax usano la chiamata alla funzione eval() e alle API correlate.

Per strutturare correttamente il contenuto in modo da poterlo usare in un'applicazione AIR, dovete tenere in considerazione le regole sulle limitazioni della sicurezza per il contenuto proveniente da origini diverse. Il contenuto che proviene da origini diverse viene collocato in categorie di sicurezza distinte, chiamate sandbox (vedete Sandbox di sicurezza ). Per impostazione predefinita, il contenuto installato con l'applicazione si trova in una sandbox dell'applicazione , per garantire al contenuto di poter accedere alle API di AIR. La sandbox dell'applicazione in genere è la sandbox più sicura, in quanto prevede restrizioni che impediscono l'esecuzione di codice non affidabile.

Il runtime vi consente di caricare il contenuto installato con l'applicazione creata in una sandbox diversa dalla sandbox dell'applicazione. Il contenuto nelle sandbox non dell'applicazione opera in un ambiente di sicurezza simile a quello di un tipico browser Web. Ad esempio, il codice nelle sandbox non dell'applicazione può usare la funzione eval() e i metodi correlati (ma allo stesso tempo non può accedere alle API di AIR). Il runtime permette al contenuto di sandbox diverse di comunicare in sicurezza in vari modi (senza esporre le API di AIR al contenuto non dell'applicazione, ad esempio). Per ulteriori informazioni, consultate Scambio di script per il contenuto presente in sandbox di sicurezza diverse .

Se chiamate un codice che per ragioni di sicurezza ha limitazioni d'uso in una sandbox, il runtime invia l'errore JavaScript “Adobe AIR runtime security violation for JavaScript code in the application security sandbox” (Violazione della sicurezza di Adobe AIR in fase di runtime per il codice JavaScript nella sandbox dell'applicazione).

Per evitare questo errore, attenetevi alle pratiche di programmazione descritte nelle sezione successiva, Errori JavaScript relativi alla sicurezza da evitare .

Per ulteriori informazioni, vedete Sicurezza HTML in Adobe AIR .