Informatie over de klasse HTMLLoader

Adobe AIR 1.0 of hoger

De klasse HTMLLoader van Adobe AIR definieert het weergaveobject dat HTML-inhoud kan weergeven in een AIR-toepassing. SWF-gebaseerde toepassingen kunnen een HTMLLoader-besturingselement aan een bestaand venster toevoegen of een HTML-venster maken dat automatisch een HTMLLoader-object bevat met HTMLLoader.createRootWindow() . Het HTMLLoader-object kan vanuit de geladen HTML-pagina worden opgeroepen met de JavaScript-eigenschap window.htmlLoader .

HTML-inhoud laden vanuit een URL

De volgende code laadt een URL in een HTMLLoader-object (voeg de HTMLLoader toe als onderliggend object van de Stage of andere weergaveobjectcontainer om de HTML-inhoud in uw toepassing weer te geven):

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

De eigenschappen width en height van een HTMLLoader-object zijn standaard allebei ingesteld op 0. U wordt aangeraden deze afmetingen in te stellen als u een HTMLLoader-object aan het Stage-object toevoegt. De HTMLLoader verstuurt verschillende gebeurtenissen terwijl een pagina wordt geladen. Op basis van deze gebeurtenissen kunt u bepalen wanneer het veilig is om met de geladen pagina te interageren. Deze gebeurtenissen worden beschreven in Aan HTML gerelateerde gebeurtenissen in AIR afhandelen .

Opmerking: In het Flex-framework kunnen alleen klassen die de klasse UIComponent uitbreiden, worden toegevoegd als onderliggende elementen van Flex Container-componenten. Daarom kunt u geen HTMLLoader rechtstreeks toevoegen als onderliggende component van een Flex Container-component. U kunt echter het Flex-besturingselement mx:HTML gebruiken om een aangepaste klasse te ontwikkelen die de UIComponent uitbreidt en een HTMLLoader als onderliggend element van de UIComponent bevat. U kunt de HTMLLoader ook toevoegen als onderliggend element van een UIComponent en de UIComponent toevoegen aan de Flex-container.

U kunt HTML-tekst ook renderen met behulp van de klasse TextField, maar de mogelijkheden hiervan zijn beperkt. De klasse TextField van Adobe® Flash® Player ondersteunt een subset van de HTML-markeringen, maar vanwege de groottebeperkingen zijn de mogelijkheden hiervan beperkt. (De klasse HTMLLoader die in Adobe AIR is opgenomen, is niet beschikbaar in Flash Player.)

HTML-inhoud laden vanuit een tekenreeks

De methode loadString() van een HTMLLoader-object laadt een tekenreeks met HTML-inhoud in het HTMLLoader-object:

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

Standaard wordt inhoud die is geladen via de methode loadString() , geplaatst in een niet-toepassingssandbox met de volgende kenmerken:

  • Deze kan inhoud laden van het netwerk, maar niet van het bestandssysteem.

  • Deze kan geen gegevens laden met behulp van XMLHttpRequest.

  • De eigenschap window.location wordt ingesteld op "about:blank" .

  • De inhoud kan geen toegang krijgen tot de eigenschap window.runtime (inhoud in een niet-toepassingssandbox kan dit bijvoorbeeld wel).

In AIR 1.5 omvat de klasse HTMLLoader een eigenschap placeLoadStringContentInApplicationSandbox . Wanneer deze eigenschap voor een HTMLLoader-object is ingesteld op true , wordt inhoud die wordt geladen via de methode loadString() , geplaatst in de toepassingssandbox. (De standaardwaarde is false .) Inhoud die wordt geladen via de methode loadString() , krijgt daarmee toegang tot de eigenschap window.runtime en tot alle API's van AIR. Als u deze eigenschap instelt op true , moet u ervoor zorgen dat de gegevensbron voor een tekenreeks die wordt gebruikt in een aanroep naar de methode loadString() , vertrouwd wordt. Code-instructies in de HTML-tekenreeks worden uitgevoerd met alle toepassingsmachtigingen wanneer deze eigenschap is ingesteld op true . Stel deze eigenschap alleen in op true wanneer u er zeker van bent dat de tekenreeks geen schadelijke code kan bevatten.

In toepassingen die zijn gecompileerd met de SDK's van AIR 1.0 of AIR 1.1, wordt inhoud die wordt geladen via de methode loadString() , geplaatst in de toepassingssandbox.

Belangrijke veiligheidsregels bij gebruik van HTML in AIR-toepassingen

De bestanden die u met de AIR-toepassing installeert, hebben toegang tot de API's van AIR. Om veiligheidsredenen heeft de inhoud van andere bronnen geen toegang tot deze API's. Voorbeeld: deze beperking voorkomt dat inhoud van een extern domein (bijvoorbeeld http://example.com) de inhoud van de bureaubladmap van de gebruiker (of nog erger) kan lezen.

Omdat beveiligingshiaten kunnen worden gebruikt door de functie eval() (en verwante API's) op te roepen, kan inhoud die met de toepassing wordt geïnstalleerd, deze methoden standaard niet gebruiken. Bepaalde Ajax-frameworks gebruiken echter de functie eval() en verwante API's.

Om inhoud goed te structureren zodat deze kan werken in een AIR-toepassing, moet u rekening houden met de beveiligingsbeperkingen voor inhoud van verschillende bronnen. Inhoud van verschillende locaties wordt in aparte beveiligingsclassificaties, sandboxen, geplaatst (zie Beveiligingssandboxen ). Inhoud die met de toepassing wordt geïnstalleerd, wordt standaard in een sandbox geïnstalleerd die de toepassingssandbox wordt genoemd. Deze verleent toegang tot de API's van AIR. De toepassingssandbox is de veiligste sandbox, aangezien beperkingen voorkomen dat niet-vertrouwde code wordt uitgevoerd.

U kunt inhoud die met uw toepassing is geïnstalleerd, ook in een andere sandbox plaatsen. Inhoud in niet-toepassingssandboxen werkt in een beveiligde omgeving, zoals in een webbrowser. Voorbeeld: code in niet-toepassingssandboxen kan eval() en verwante methoden gebruiken (maar anderzijds heeft deze code geen toegang tot de API's van AIR). De runtime voorziet in manieren om inhoud in verschillende sandboxen veilig te laten communiceren (zonder bijvoorbeeld API's van AIR toegankelijk te maken voor niet-toepassingsinhoud). Zie Cross-scripting van inhoud in verschillende beveiligingssandboxen voor meer informatie.

Als u code oproept die niet in een sandbox kan worden gebruikt vanwege beveiligingsbeperkingen, geeft de runtime de foutmelding weer dat er in de runtime van Adobe AIR een beveiligingsfout betreffende JavaScript-code in de toepassingsbeveiligingssandbox is opgetreden.

Om deze fout te voorkomen, volgt u de coderingsrichtlijnen in de volgende sectie, JavaScript-beveiligingsfouten voorkomen .

Zie HTML-beveiliging in Adobe AIR voor meer informatie.