Adobe Flash Platform * Inhoud laden
Startpagina / ActionScript 3.0-ontwikkelaarsgids / Beveiliging
SWF-bestanden en afbeeldingen met de klasse Loader laden
Geluids- en videobestanden laden
SWF-bestanden en afbeeldingen in een tekstveld laden met de tag <img >
Inhoud leveren met RTMP-servers
Flash Player- en AIR-inhoud kan vele andere inhoudstypen laden, waaronder:
HTML-bestanden (alleen AIR)
JavaScript (alleen AIR)
U kunt de klasse Loader gebruiken om SWF-bestanden en afbeeldingen te laden (JPG-, GIF- of PNG-bestanden). Alle SWF-bestanden die zich niet in de sandbox Lokaal-met-bestandssysteem bevinden, kunnen SWF-bestanden en afbeeldingen laden vanaf een willekeurig netwerkdomein. Alleen SWF-bestanden in lokale sandboxen kunnen SWF-bestanden en afbeeldingen laden vanaf het lokale bestandssysteem. Bestanden in de sandbox Lokaal-met-netwerk kunnen echter alleen lokale SWF-bestanden laden die zich in de sandbox Lokaal-vertrouwd of Lokaal-met-netwerk bevinden. SWF-bestanden in de sandbox Lokaal-met-netwerk kunnen andere lokale inhoud laden dan SWF-bestanden (zoals afbeeldingen), maar ze krijgen geen toegang tot gegevens in de geladen inhoud.
Wanneer u een SWF-bestand van een niet-vertrouwde bron (zoals een ander domein dan dat van het SWF-hoofdbestand van het object Loader) laadt, kunt u een masker voor het object Loader definiëren om te voorkomen dat de geladen inhoud (die een onderliggend item van het object Loader is) naar delen van het werkgebied buiten het masker tekent, zoals in de volgende code wordt getoond:
Wanneer u de methode load() van het object Loader aanroept, kunt u een parameter context opgeven, die een object LoaderContext is. De klasse LoaderContext bevat drie eigenschappen waarmee u kunt definiëren hoe de geladen inhoud wordt gebruikt:
checkPolicyFile: Gebruik deze eigenschap alleen wanneer u een afbeeldingsbestand laadt (geen SWF-bestand). Geef dit op voor een afbeeldingsbestand uit een ander domein dan het domein van het bestand dat het object Loader bevat. Als u deze eigenschap instelt op true, controleert de Loader de oorspronkelijke server op een bestand met interdomeinbeleid (zie Controlemiddelen voor websites (beleidsbestanden)). Als de server bevoegdheden toekent aan het domein van Loader, heeft ActionScript-code in SWF-bestanden in het domein Loader toegang tot de gegevens in de geladen afbeelding. Met andere woorden, u kunt de eigenschap Loader.content gebruiken om een verwijzing te verkrijgen naar het object Bitmap dat de geladen afbeelding vertegenwoordigt, of u kunt de methode BitmapData.draw() of BitmapData.drawWithQuality() gebruiken om toegang te krijgen tot de pixels van de geladen afbeelding. De methode drawWithQuality is beschikbaar in Flash Player 11.3 en hoger en in AIR 3.3 en hoger.
securityDomain: Gebruik deze eigenschap uitsluitend wanneer u een SWF-bestand laadt (geen afbeelding). Geef dit op voor een SWF-bestand uit een ander domein dan het domein van het bestand dat het object Loader bevat. Er worden momenteel slechts twee waarden ondersteund voor de eigenschap securityDomain: null (standaardwaarde) en SecurityDomain.currentDomain. Als u SecurityDomain.currentDomain opgeeft, wordt hiermee gevraagd dat het geladen SWF-bestand naar de sandbox van het ladende SWF-bestand wordt geïmporteerd. Dit houdt in dat het functioneert alsof het is geladen vanaf de server van het ladende SWF-bestand. Dit is alleen toegestaan als er een URL-beleidsbestand aanwezig is op de server van het geladen SWF-bestand, waardoor toegang mogelijk is voor het domein van het ladende SWF-bestand. Als het vereiste beleidsbestand is gevonden, kunnen lader en geladen inhoud vrij scriptbewerkingen op elkaar uitvoeren als het laden is begonnen, omdat deze zich in dezelfde sandbox bevinden. In plaats van het importeren naar een sandbox kunt u meestal ook een gewone laadbewerking uitvoeren en vervolgens de methode Security.allowDomain() laten aanroepen door het geladen SWF-bestand. De laatste methode is mogelijk eenvoudiger, omdat het geladen SWF-bestand zich dan in de eigen natuurlijke sandbox bevindt, en dus toegang kan krijgen tot bronnen op de eigen server.
applicationDomain: Gebruik deze eigenschap uitsluitend wanneer u een SWF-bestand laadt dat in ActionScript 3.0 is geschreven (geen afbeelding of SWF-bestand dat in ActionScript 1.0 of 2.0 is geschreven). Bij het laden van het bestand kunt u opgeven dat het bestand in een bepaald toepassingsdomein wordt geplaatst, en niet, wat standaard het geval is, in een nieuw toepassingsdomein dat een onderliggend domein is van het toepassingsdomein van het ladende SWF-bestand. Toepassingsdomeinen zijn subeenheden van beveiligingsdomeinen. U kunt dus alleen een doeltoepassingsdomein opgeven als het SWF-bestand dat u aan het laden bent, van uw eigen beveiligingsdomein afkomstig is, ofwel omdat dit van uw eigen server komt, ofwel omdat u het met succes in uw beveiligingsdomein hebt geïmporteerd met de eigenschap securityDomain. Als u een toepassingsdomein opgeeft, terwijl het geladen SWF-bestand deel uitmaakt van een ander beveiligingsdomein, wordt het domein dat u in applicationDomain opgeeft, genegeerd. Zie Werken met toepassingsdomeinen voor meer informatie.
Zie De context van de geladen gegevens opgeven voor meer informatie.
Een belangrijke eigenschap van een object Loader is de eigenschap contentLoaderInfo, wat een object LoaderInfo is. Anders dan de meeste andere objecten, wordt een object LoaderInfo tussen het ladende SWF-bestand en de geladen inhoud gedeeld en is het object altijd toegankelijk voor beide partijen. Als de geladen inhoud een SWF-bestand is, heeft het toegang tot het object LoaderInfo via de eigenschap DisplayObject.loaderInfo. Objecten LoaderInfo bieden informatie over de voortgang van het laden, de URL's van de lader en geladen inhoud, de vertrouwensrelatie tussen de lader en geladen inhoud en andere informatie. Zie De voortgang van het laden controleren voor meer informatie.
Met de methoden Sound.load(), NetConnection.connect() en NetStream.play() kunnen geluids- en videobestanden vanaf netwerken worden geladen door alle inhoud, behalve inhoud in de sandbox Lokaal-met-bestandssysteem.
Media van het lokale bestandssysteem kan alleen worden geladen door inhoud in de sandbox Lokaal-met-bestandssysteem en in de sandbox AIR-toepassing. De gegevens in deze geladen bestanden zijn alleen toegankelijk voor inhoud in de sandbox Lokaal-met-bestandssysteem, de sandbox AIR-toepassing en de sandbox Lokaal-vertrouwd.
Er gelden geen andere beperkingen voor het benaderen van gegevens uit geladen media. Zie Geladen media benaderen als gegevens voor meer informatie.
U kunt de tag <img> gebruiken om SWF-bestanden en bitmaps in een tekstveld te laden, zoals in de volgende code wordt getoond:
U kunt toegang verkrijgen tot inhoud die zo is geladen met de methode getImageReference() van de instantie TextField, zoals in de volgende code wordt getoond:
SWF-bestanden en afbeeldingen die zo zijn geladen, worden in de sandbox geplaatst die overeenkomt met de locatie waarvan de bestanden zijn gedownload.
Wanneer u een afbeeldingsbestand in een tekstveld laadt met de tag <img>, kunt u mogelijk toegang krijgen tot de gegevens in de afbeelding via een bestand met interdomeinbeleid. U kunt controleren of er een beleidsbestand aanwezig is door een attribuut checkPolicyFile aan de tag <img> toe te voegen, zoals in de volgende code wordt getoond:
Wanneer u een SWF-bestand in een tekstveld laadt met behulp van een tag <img>, kunt u toegang tot de gegevens in dat SWF-bestand toestaan via het aanroepen van de methode Security.allowDomain().
Als u een tag <img> in een tekstveld gebruikt om een extern bestand te laden (in plaats van een klasse Bitmap die in het SWF-bestand is ingesloten), wordt automatisch een object Loader gemaakt als onderliggend element van het object TextField en wordt het externe bestand in die Loader geladen alsof u een object Loader in ActionScript had gebruikt om het bestand te laden. In dit geval retourneert de methode getImageReference() de Loader die automatisch is gemaakt. Er is geen beveiligingscontrole nodig om toegang te krijgen tot dit object Loader, omdat het object zich in dezelfde beveiligingssandbox bevindt als de aanroepende code.
Als u echter via de eigenschap content van het object Loader toegang wilt krijgen tot geladen media, zijn beveiligingsregels van toepassing. Als de inhoud een afbeelding is, moet u een bestand met interdomeinbeleid implementeren. Als de inhoud een SWF-bestand is, moet de methode allowDomain() worden aangeroepen door de code in het SWF-bestand.
In de sandbox van toepassingen worden <img>-tags in tekstvelden genegeerd om phishingaanvallen te voorkomen. Bovendien mag code die in de sandbox van een toepassing wordt uitgevoerd, de methode allowDomain() niet aanroepen.
Flash Media Server maakt gebruik van RMTP (Real-Time Media Protocol) bij het leveren van gegevens en geluids- en videobestanden. Deze media kan worden geladen door de methode connect() van de klasse NetConnection te gebruiken, waarbij als parameter een RTMP-URL wordt doorgegeven. Flash Media Server kan op basis van het domein van het aanvragende bestand verbindingen beperken en voorkomen dat inhoud wordt gedownload. Bekijk de Flash Media Server-documentatie online op www.adobe.com/go/learn_fms_docs_nl voor meer informatie.
Als u de methoden BitmapData.draw(), BitmapData.drawWithQuality() en SoundMixer.computeSpectrum() wilt gebruiken om runtimeafbeeldingen en geluidsgegevens te extraheren uit RTMP-streams, moet u toegang verlenen tot de server. Met de ActionScript-eigenschappen Client.videoSampleAccess en Client.audioSampleAccess aan de serverkant kunt u toegang verlenen tot bepaalde mappen op Flash Media Server. Zie de Server-Side ActionScript Language Reference voor meer informatie. (De methode drawWithQuality is beschikbaar in Flash Player 11.3 en hoger en in AIR 3.3 en hoger.)