HTML in AIR

Adobe AIR 1.0 e versioni successive

AIR e WebKit definiscono un paio di elementi ed attributi HTML non standard, tra cui:

Elementi frame e iframe HTML

Gestori di evento di elementi HTML

Elementi frame e iframe HTML

AIR aggiunge nuovi attributi agli elementi di contenuto frame e iframe nella sandbox dell'applicazione:

Attributo sandboxRoot
L'attributo sandboxRoot specifica un dominio di origine alternativo non dell'applicazione per il file specificato dall'attributo del frame src . Il file viene caricato nella sandbox non dell'applicazione corrispondente al dominio specificato. Tra il contenuto del file e il contenuto caricato dal dominio specificato può essere effettuato uno scambio di script.
Importante: se si imposta il valore di sandboxRoot sull'URL di base del dominio, tutte le richieste di contenuto da quel dominio vengono caricate dalla directory dell'applicazione invece del server remoto (se la richiesta deriva dall'esplorazione della pagina, da un XMLHttpRequest o da qualsiasi altro sistema di caricamento del contenuto).

Attributo documentRoot
L'attributo documentRoot specifica la directory locale da cui caricare gli URL che vengono risolti ai file nel percorso specificato da sandboxRoot .

Quando si risolvono gli URL, sia nell'attributo src del frame che nel contenuto caricato nel frame stesso, la parte di URL che corrisponde al valore specificato in sandboxRoot viene sostituita dal valore specificato in documentRoot . Pertanto, nel seguente tag del frame:

<iframe        src="http://www.example.com/air/child.html"  
            documentRoot="app:/sandbox/" 
            sandboxRoot="http://www.example.com/air/"/>

child.html viene caricato dalla sottodirectory sandbox della cartella di installazione dell'applicazione. Gli URL relativi in child.html vengono risolti in base alla directory sandbox . Si noti che i file sul server remoto all'indirizzo www.example.com/air non sono accessibili nel frame, dal momento che AIR tenta di caricarli dalla directory app:/sandbox/.

Attributo allowCrossDomainXHR
Includete allowCrossDomainXHR="allowCrossDomainXHR" nel tag di apertura del frame per consentire al contenuto del frame di effettuare XMLHttpRequests a qualsiasi dominio remoto. Per impostazione predefinita, il contenuto non dell'applicazione può solo effettuare tali richieste al relativo dominio di origine. Consentite XHR tra domini ha implicazioni di sicurezza serie. Il codice presente nella pagina è in grado di scambiare dati con qualsiasi dominio. Se nella pagina viene inserito in qualche modo contenuto dannoso, tutti i dati accessibili al codice nella sandbox corrente possono essere danneggiati. Attivate XHR tra i domini solo per le pagine create e controllate direttamente, e solo quando il caricamento dei dati tra domini è davvero necessario. Inoltre, convalidate attentamente tutti i dati esterni caricati dalla pagine per impedire l'inserimento di codice o altre forme di attacco.
Importante: se l'attributo allowCrossDomainXHR è incluso in un elemento frame o iframe, i XHR sono attivati, a meno che il valore assegnato non sia "0" o inizi con la lettera "f" o "n". Ad esempio, l'impostazione di allowCrossDomainXHR su " deny" consentirebbe comunque XHR tra domini. Se non desiderate attivare richieste tra domini, lasciate l'attributo fuori dalla dichiarazione dell'elemento.

Attributo ondominitialize
Specifica un gestore eventi per l'evento dominitialize di un frame. Si tratta di un evento specifico di AIR che viene attivato quando gli oggetti window e document del frame sono stati creati, ma prima che tutti gli script siano stati analizzati o i documenti creati.

Il frame dominitialize invia l'evento abbastanza presto nella sequenza di caricamento, in modo che tutti gli script della pagina secondaria possano far riferimento a oggetti, variabili e funzioni aggiunte al documento secondario dal gestore dominitialize . La pagina principale deve trovarsi nella stessa sandbox dell'elemento secondario per aggiungere o accedere direttamente a qualsiasi oggetto in un documento secondario. Un elemento principale nella sandbox dell'applicazione, tuttavia, è in grado di stabilire un bridge sandbox per comunicare con il contenuto di una sandbox non dell'applicazione.

Negli esempi che seguono è illustrato l'utilizzo del tag iframe in AIR:

Collocate child.html in una sandbox remota, senza mapparlo a un dominio reale su un server remoto:

<iframe        src="http://localhost/air/child.html"  
            documentRoot="app:/sandbox/" 
            sandboxRoot="http://localhost/air/"/>

Collocate child.html in una sandbox remota, consentendo XMLHttpRequests solo a www.example.com :

<iframe        src="http://www.example.com/air/child.html"  
            documentRoot="app:/sandbox/" 
            sandboxRoot="http://www.example.com/air/"/>

Collocare child.html in una sandbox remota, consentendo XMLHttpRequests a qualsiasi dominio remoto:

<iframe        src="http://www.example.com/air/child.html"  
            documentRoot="app:/sandbox/" 
            sandboxRoot="http://www.example.com/air/" 
            allowCrossDomainXHR="allowCrossDomainXHR"/>

Collocate child.html nella sandbox locale con file system:

<iframe             src="file:///templates/child.html"  
            documentRoot="app:/sandbox/" 
            sandboxRoot="app-storage:/templates/"/>

Collocate child.html in una sandbox remota utilizzando l'evento dominitialize per stabilire un bridge sandbox:

<html> 
<head> 
<script> 
var bridgeInterface = {}; 
bridgeInterface.testProperty = "Bridge engaged"; 
function engageBridge(){ 
    document.getElementById("sandbox").parentSandboxBridge = bridgeInterface; 
} 
</script> 
</head> 
<body> 
<iframe id="sandbox" 
            src="http://www.example.com/air/child.html"  
            documentRoot="app:/" 
            sandboxRoot="http://www.example.com/air/" 
            ondominitialize="engageBridge()"/> 
</body> 
</html>

Nel seguente documento child.html il contenuto secondario può accedere al bridge sandbox principale:

<html> 
    <head> 
        <script> 
            document.write(window.parentSandboxBridge.testProperty); 
        </script>   
    </head>   
    <body></body> 
</html>

Per ulteriori informazioni, vedete Scambio di script per il contenuto presente in sandbox di sicurezza diverse e Sicurezza HTML in Adobe AIR .

Gestori di evento di elementi HTML

Gli oggetti DOM in AIR e in WebKit inviano alcuni eventi non trovati nel modello di evento DOM standard. Nella tabella seguente sono elencati gli attributi dell'evento correlato che è possibile utilizzare per specificare i gestori per tali eventi:

Nome attributo di callback

Descrizione

oncontextmenu

Chiamato quando si effettua la chiamata di un menu contestuale, ad esempio attraverso l'uso del pulsante destro del mouse o tenendo premuto il tasto Comando sul testo selezionato.

oncopy

Chiamato quando viene copiata una selezione in un elemento.

oncut

Chiamato quando viene tagliata una selezione in un elemento.

ondominitialize

Chiamato quando viene creato il DOM di un documento caricato in un frame o in un iframe, ma prima che venga creato qualsiasi elemento DOM o analizzato qualsiasi script.

ondrag

Chiamato quando viene trascinato un elemento.

ondragend

Chiamato quando viene rilasciato un trascinamento.

ondragenter

Chiamato quando un movimento di trascinamento entra nei limiti di un elemento.

ondragleave

Chiamato quando un movimento di trascinamento lascia i limiti di un elemento.

ondragover

Chiamato continuamente quando un movimento di trascinamento rientra nei limiti di un elemento.

ondragstart

Chiamato quando inizia un movimento di trascinamento.

ondrop

Chiamato quando un movimento di trascinamento viene rilasciato su un elemento.

onerror

Chiamato quando si verifica un errore durante il caricamento di un elemento.

oninput

Chiamato quando si immette testo in un elemento del form.

onpaste

Chiamato quando si incollano dati in un elemento.

onscroll

Chiamato quando si scorre il contenuto di un elemento scorrevole.

onselectstart

Chiamato all'avvio di una selezione.

Attributo contentEditable di HTML

È possibile aggiungere l'attributo contentEditable a qualsiasi elemento HTML per consentire agli utenti di modificare il contenuto dell'elemento. Ad esempio, nel seguente esempio di codice HTML l'intero documento viene impostato come modificabile, ad eccezione del primo elemento p :

<html> 
<head/> 
<body contentEditable="true"> 
    <h1>de Finibus Bonorum et Malorum</h1> 
    <p contentEditable="false">Sed ut perspiciatis unde omnis iste natus error.</p> 
    <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis.</p> 
</body> 
</html>
Nota: se si imposta la proprietà document.designMode su on , tutti gli elementi del documento sono modificabili, a prescindere dall'impostazione di contentEditable per un elemento individuale. Tuttavia, l'impostazione di designMode su off non disattiva la modifica di elementi per i quali contentEditable corrisponde a true . Per ulteriori informazioni, consultate Proprietà Document.designMode .

URL Data:

AIR supporta URL data: per i seguenti elementi:

  • img

  • input type=”image”

  • Regole CSS che consentono immagini (ad esempio, immagine di sfondo)

Gli URL data: consentono di inserire dati immagine binari direttamente in un documento CSS o HTML come una stringa con codifica Base64. Nell'esempio seguente viene utilizzato un URL data: come sfondo ricorrente:

<html> 
<head> 
<style> 
body { 
background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF%2F6cA%2F%2F%2F%2Fgxp3lwAAAAJ0Uk5T%2FwDltzBKAAABF0lEQVR42uzZQQ7CMAxE0e%2F7X5oNCyRocWzPiJbMBZ6qpIljE%2BnwklgKG7kwUjc2IkIaxkY0CPdEsCCasws6ShXBgmBBmEagpXQQLAgWBAuSY2gaKaWPYEGwIEwg0FRmECwIFoQeQjJlhJWUEFazjFDJCkI5WYRWMgjtfEGYyQnCXD4jTCdm1zmngFpBFznwVNi5RPSbwbWnpYr%2BBHi%2FtCTfgPLEPL7jBctAKBRptXJ8M%2BprIuZKu%2BUKcg4YK1PLz7kx4bSqHyPaT4d%2B28OCJJiRBo4FCQsSA0bziT3XubMgYUG6fc5fatmGBQkL0hoJ1IaZMiQsSFiQ8vRscTjlQOI2iHZwtpHuf%2BJAYiOiJSkj8Z%2FIQ4ABANvXGLd3%2BZMrAAAAAElFTkSuQmCC'); 
background-repeat:repeat; 
} 
</style> 
</head> 
<body> 
</body> 
</html>

Quando usate URL data:, tenete presente che lo spazio vuoto aggiuntivo è significativo. Ad esempio, la stringa di dati deve essere immessa come una riga singola ininterrotta. In caso contrario, le interruzioni di riga vengono trattate come parte dei dati e l'immagine non può essere decodificata.