Protokół HTML w środowisku AIR

Adobe AIR 1.0 i starsze wersje

Środowiska AIR i WebKit definiują kilka niestandardowych elementów i atrybutów HTML, między innymi:

Elementy ramek i ramek pływających HTML

Moduły obsługi zdarzeń elementów HTML

Elementy ramek i ramek pływających HTML

Środowisko AIR dodaje nowe atrybuty do elementów ramek i ramek pływających treści w obszarze izolowanym aplikacji:

sandboxRoot, atrybut
Atrybut sandboxRoot określa alternatywną, nieaplikacyjną domenę dla pliku określonego przez atrybut src ramki. Plik jest ładowany do nieaplikacyjnego obszaru izolowanego, który odpowiada danej domenie. Skrypty treści pliku i treści ładowanej z określonej domeny mogą odwoływać się do siebie wzajemnie.
Ważne: Jeśli wartość sandboxRoot zostanie zmieniona na podstawowy adres URL domeny, wówczas wszystkie żądania z domeny zostaną załadowane z katalogu aplikacji, a nie z serwera zdalnego (niezależnie od tego, czy żądanie wynikło z nawigacji na stronie, jest żądaniem XMLHttpRequest lub wynikło z innego sposobu ładowania treści).

Atrybut documentRoot
Atrybut documentRoot określa katalog lokalny, z którego ładowane są adresy URL wskazujące na pliki w lokalizacji określonej przez sandboxRoot .

Podczas odczytywania adresów URL w atrybucie src ramki lub w treści załadowanej do ramki część adresu URL zgodna z wartością określoną w sandboxRoot jest zastępowana wartością określoną w documentRoot . W poniższym znaczniku ramki:

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

kod child.html jest ładowany z podkatalogu sandbox folderu instalacyjnego aplikacji. Względne adresy URL w child.html są odczytywane na podstawie katalogu sandbox . Pliki z serwera zdalnego www.example.com/air nie są dostępne w ramce, ponieważ środowisko AIR podejmuje próby załadowania tych plików z katalogu app:/sandbox/.

Atrybut allowCrossDomainXHR
Aby umożliwić treści z ramki wysyłanie żądań XMLHttpRequest do dowolnej domeny zdalnej, należy dołączyć kod allowCrossDomainXHR="allowCrossDomainXHR" do ramki otwierającej. Domyślnie treść nieaplikacyjna może wysyłać takie żądania tylko do własnej domeny źródłowej. Istnieją poważne ograniczenia dot. zabezpieczeń związanych z zezwoleniem na stosowanie międzydomenowych żądań XHR. Kod na stronie może wymieniać dane w dowolnej domenie. Jeśli treści złośliwe zostaną wstrzyknięte do strony, zagrożone będą wszystkie dane dostępne dla kodu znajdujące się w bieżącym obszarze izolowanym. Międzydomenowe żądania XHR można umożliwić wyłącznie dla stron tworzonych i kontrolowanych i tylko wówczas, gdy międzydomenowe ładowanie danych jest naprawdę niezbędne. Ponadto należy uważnie sprawdzić wszystkie dane zewnętrzne ładowane przez stronę, aby zapobiec wstrzykiwaniu kodu lub innym formom ataku.
Ważne: Jeśli atrybut allowCrossDomainXHR został dołączony do elementu ramki lub ramki pływającej, międzydomenowe żądania XHR są możliwe (chyba że wartość jest równa „0” lub rozpoczyna się od liter „f” albo „n”). Na przykład: ustawienie dla allowCrossDomainXHR wartości "deny" nadal umożliwia międzydomenowe żądania XHR. Jeśli żądania międzydomenowe mają być zabronione, należy pozostawić atrybut poza deklaracją elementu.

ondominitialize, atrybut
Określa moduł obsługi zdarzenia dominitialize ramki. To zdarzenie jest właściwe dla środowiska AIR i uruchamiane jest po utworzeniu obiektów window lub document ramki, ale przed analizowaniem skryptów lub utworzeniem elementów dokumentów.

Ramka wywołuje zdarzenie dominitialize odpowiednio wcześnie w sekwencji ładowania, aby skrypt na każdej stronie podrzędnej mógł odwoływać się do obiektów, zmiennych i funkcji dodawanych do dokumentu podrzędnego przez moduł obsługi dominitialize . Strona nadrzędna musi znajdować się w tym samym obszarze izolowanym co podrzędna — wówczas może bezpośrednio dodawać albo uzyskiwać dostęp do obiektów w dokumencie podrzędnym. Jednak dokument nadrzędny w obszarze izolowanym aplikacji może utworzyć most (obszaru podrzędnego) w celu nawiązania komunikacji z treścią w obszarze izolowanym.

Poniższe przykłady ilustrują użycie znacznika iframe w środowisku AIR:

Umieszczanie dokumentu child.html w zdalnym obszarze izolowanym bez odwzorowania do rzeczywistej domeny na serwerze zdalnym:

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

Umieszczanie dokumentu child.html w zdalnym obszarze izolowanym i zezwolenie na generowanie żądań XMLHttpRequest tylko do strony www.example.com :

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

Umieszczanie dokumentu child.html w zdalnym obszarze izolowanym i zezwolenie na generowanie żądań XMLHttpRequest tylko do domeny zdalnej:

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

Umieszczenie dokumentu child.html w lokalnym obszarze izolowanym z systemem plików:

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

Umieszczenie dokumentu child.html w zdalnym obszarze izolowanym za pomocą zdarzenia dominitialize w celu ustawienia mostu obszaru izolowanego:

<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>

Poniższy dokument child.html ilustruje, jak zawartość dokumentu potomnego może uzyskać dostęp do mostu obszaru izolowanego dokumentu macierzystego.

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

Więcej informacji zawierają sekcje Treść odwołująca się do skryptów w różnych bezpiecznych obszarach izolowanych i Zabezpieczenia HTML w środowisku Adobe AIR .

Moduły obsługi zdarzeń elementów HTML

Obiekty DOM w AIR i Webkit wywołują niektóre zdarzenia niedostępne w standardowym modelu zdarzeń DOM. W poniższej tabeli przedstawiono powiązane atrybuty zdarzeń, za pomocą których można określać moduły obsługi dla tych zdarzeń:

Nazwa atrybutu wywołania zwrotnego

Opis

oncontextmenu

Wywoływany przy wywołaniu menu kontekstowego, np. poprzez kliknięcie prawym przyciskiem myszy lub kliknięcie z wciśniętym klawiszem Command w zaznaczonym tekście.

oncopy

Wywoływany w przypadku kopiowania zaznaczenia elementu.

oncut

Wywoływany w przypadku wycinania zaznaczenia elementu.

ondominitialize

Wywoływany, gdy tworzony jest model DOM dokumentu załadowanego do ramki lub ramki pływającej, ale przed utworzeniem elementów DOM i przed analizowaniem skryptów.

ondrag

Wywoływany przy przeciąganiu elementu.

ondragend

Wywoływany po zakończeniu przeciągania.

ondragenter

Wywoływany, gdy gest przeciągania sięga do wnętrza granic elementu.

ondragleave

Wywoływany, gdy gest przeciągania sięga na zewnątrz granic elementu.

ondragover

Wywoływany w sposób ciągły, gdy gest przeciągania znajduje się w granicach elementu.

ondragstart

Wywoływany przy rozpoczęciu gestu przeciągania.

ondrop

Wywoływany po zwolnieniu gestu przeciągania nad elementem.

onerror

Wywoływany w przypadku błędu podczas ładowania elementu.

oninput

Wywoływany, gdy tekst zostanie wprowadzony do elementu formularza.

onpaste

Wywoływany, gdy pozycja została wklejona do elementu.

onscroll

Wywołany podczas przewijania treści przewijanego elementu.

onselectstart

Wywoływany po rozpoczęciu zaznaczania.

Atrybut contentEditable HTML

Atrybut contentEditable można dodać do dowolnego elementu HTML, aby umożliwić użytkownikom edytowanie treści elementu. Poniższy przykładowy kod HTML ustawia cały dokument jako dostępny do edycji, z wyjątkiem pierwszego elementu 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>
Uwaga: Jeśli właściwość document.designMode ma wartość on , wówczas wszystkie elementy w dokumencie są dostępne do edycji, bez względu na ustawienie contentEditable w poszczególnych elementach. Jednak ustawienie właściwości designMode na off , nie uniemożliwia edytowania elementów, dla których właściwość contentEditable ma wartość true . Dodatkowe informacje zawiera sekcja Document.designMode, właściwość .

Data: Adresy URL

Środowisko AIR obsługuje adresy URL data: dla następujących elementów:

  • img

  • input type=”image”

  • Reguły CSS dopuszczające użycie obrazów (np. obrazu tła)

Adresy URL Data umożliwiają wstawianie binarnych danych obrazów bezpośrednio do dokumentu CSS lub HTML jako ciągu zakodowanego zgodnie z base64. Poniżej przedstawiono przykład wykorzystania adresu URL data: jako wielokrotnego tła:

<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>

Podczas korzystania z adresów URL data: należy pamiętać o tym, że dodatkowe białe znaki są uwzględniane i mają znaczenie. Na przykład ciąg danych musi zostać wprowadzony jako pojedynczy, nieprzerwany wiersz. W przeciwnym razie przerwy w wierszu będą traktowane jako część danych i nie będzie możliwe rozkodowanie obrazu.