Inläsning av innehåll

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Flash Player- och AIR-innehåll kan läsa in många typer av annat innehåll, däribland följande:

  • SWF-fil

  • bilder

  • Ljud

  • Video

  • HTML-filer (endast AIR)

  • JavaScript (endast AIR)

Läsa in SWF-filer och bilder med klassen Loader

Du kan använda klassen Loader för att läsa in SWF-filer och bilder (JPG-, GIF- eller PNG-filer). Alla SWF-filer, förutom den i sandlådan lokal-med-filsystem, kan läsa in SWF-filer och bilder från valfri nätverksdomän. Endast SWF-filer i lokala sandlådor kan läsa in SWF-filer och bilder från det lokala filsystemet. Däremot kan filer i sandlådan lokal-med-nätverk endast läsa in lokala SWF-filer som finns i sandlådan lokal-tillförlitlig eller lokal-med-nätverk. SWF-filer i sandlådan lokal-med-nätverk läser in lokalt innehåll som inte är SWF-filer (t.ex. bilder), däremot har de ingen åtkomst till data i det inlästa innehållet.

Vid inläsning av en SWF-fil från en otillförlitlig källa (exempelvis en annan domän än Loader-objektets rot-SWF-fil) kanske du vill definiera en mask för Loader-objektet för att förhindra att det inlästa innehållet (som är underordnad Loader-objektet) ritar delar av scenen utanför den masken, som framgår av följande kod:

import flash.display.*; 
import flash.net.URLRequest; 
var rect:Shape = new Shape(); 
rect.graphics.beginFill(0xFFFFFF); 
rect.graphics.drawRect(0, 0, 100, 100); 
addChild(rect); 
var ldr:Loader = new Loader(); 
ldr.mask = rect; 
var url:String = "http://www.unknown.example.com/content.swf"; 
var urlReq:URLRequest = new URLRequest(url); 
ldr.load(urlReq); 
addChild(ldr);

När du anropar metoden load() i objektet Loader så kan du ange parametern context , vilket är ett LoaderContext-objekt. Klassen LoaderContext innehåller tre egenskaper som du anger för att definiera hur inläst innehåll ska användas:

  • checkPolicyFile : Använd den här egenskapen endast när du läser in en bildfil (inte en SWF-fil). Ange egenskapen för en bildfil från en annan domän än den som filen med Loader-objektet har. Om du anger egenskapen med true kontrolleras om det finns en URL-principfil på den ursprungliga servern (se Webbplatsinställningar (principfiler) ). Om servern ger behörighet till Loader-domänen så får ActionScript från SWF-filer i Loader-domänen åtkomst till data i inläst bild. Du kan alltså använda egenskapen Loader.content för att hämta en referens till det Bitmap-objekt som representerar den inlästa bilden eller metoderna BitmapData.draw() och BitmapData.drawWithQuality() för att komma åt pixlar från den inlästa bilden. Metoden drawWithQuality är tillgänglig i Flash Player 11.3 och senare; AIR 3.3 och senare.

  • securityDomain : Använd bara den här egenskapen när du läser in en SWF-fil (inte en bild). Ange den här för en SWF-fil från en annan domän än den som filen med Loader-objektet har. Det finns endast två värden som för tillfället kan användas för egenskapen securityDomain : null (standard) och SecurityDomain.currentDomain . Om du anger SecurityDomain.currentDomain krävs det att inläst SWF-fil har importerats till sandlådan med inläsande SWF-fil, vilket innebär att den används som om den vore inläst från den inläsande SWF-filens egen server. Detta tillåts bara om en URL-principfil finns på den inlästa SWF-filens server, vilket ger åtkomst via den inläsande SWF-filens domän. Om principfilen som krävs finns kan inläsare och utläsare tillåtas skripta varandra när inläsningen påbörjas, eftersom de ligger i samma sandlåda. Observera, att sandlådeimport i de flesta fall kan ersättas med att du gör en vanlig inläsning och sedan ser till att inläst SWF-fil anropar metoden Security.allowDomain() . Den senare metoden kan vara enklare att använda, eftersom den inlästa SWF-filen då kommer att ligga i sin egen vanliga sandlåda och har därför åtkomst till resurser på den egna servern.

  • applicationDomain : Använd bara den här egenskapen när du läser in en SWF-fil som är skriven i ActionScript 3.0 (inte en bild eller SWF-fil som är skriven i ActionScript 1.0 eller 2.0). Vid inläsningen av filen kan du ange att filen ska placeras i en specifik programdomän, i stället för att med standardinställningen placeras i en ny programdomän som är underordnad den inläsande SWF-filens programdomän. Observera, att programdomäner är underenheter till säkerhetsdomäner och därför kan du ange en destinationsprogramdomän endast om SWF-filen du läser in kommer från den egna säkerhetsdomänen, beroende på antingen att den kommer den från den egna servern eller att importen har slutförts till den egna säkerhetsdomänen med egenskapen securityDomain . Om du anger en programdomän, men den inlästa SWF-filen ingår i en annan säkerhetsdomän, ignoreras angiven domän i applicationDomain . Mer information finns i Arbeta med programdomäner .

Mer information finns i Ange innehåll för inläsning .

En viktig egenskap för Loader-objektet är egenskapen contentLoaderInfo , vilket är ett LoaderInfo-objekt. Till skillnad från de flesta andra objekt delas LoaderInfo-objektet mellan inläsande SWF-fil och det inlästa innehållet. Objektet är dessutom alltid tillgängligt för båda parter. Om det inlästa innehållet är en SWF-fil har den åtkomst till objektet LoaderInfo via egenskapen DisplayObject.loaderInfo . LoaderInfo-objekt innehåller uppgifter om inläsningsförloppet, URL-adresserna för in- och utläsare, tillförlitligheten mellan in- och utläsare samt annan information. Mer information finns i Övervaka inläsningsförloppet .

Inläsning av ljud och video

Allt innehåll, förutom det som finns i sandlådan lokal-med-filsystem, tillåts att läsa in ljud och video från nätverksplatser med metoderna Sound.load() , NetConnection.connect() och NetStream.play() .

Endast innehåll i sandlådan lokal-med-filsystem och i AIR-programsandlådor kan läsa in media från det lokala filsystemet. Endast innehåll i sandlådan lokal-med-filsystem och i AIR-programsandlådan eller sandlådan lokal-tillförlitlig har åtkomst till data i dessa inlästa filer.

Det finns andra begränsningar för åtkomst av data från inlästa medier. Mer information finns i Åtkomst av inlästa medier som data .

Inläsning av SWF-filer och bilder via taggen <img> i ett textfält

Du kan läsa in SWF-filer och bitmappar till ett textfält genom att använda taggen <img> på följande sätt:

<img src = 'filename.jpg' id = 'instanceName' >

Åtkomst till det inlästa innehållet ges via metoden getImageReference() i TextField-instansen, enligt följande:

var loadedObject:DisplayObject = myTextField.getImageReference('instanceName');

Observera däremot att SWF-filer och bilder som är inlästa på detta sätt placeras i sandlådan som motsvarar deras ursprung.

När du läser in en bildfil med hjälp av taggen <img> i ett textfält ges åtkomsten till data i bilden via en URL-principfil. Du kan söka efter en principfil genom att lägga till attributet checkPolicyFile i taggen <img> , enligt följande:

<img src = 'filename.jpg' checkPolicyFile = 'true' id = 'instanceName' >

När du läser in en SWF-fil med hjälp av taggen <img> i ett textfält kan du tillåta åtkomst till SWF-filens data via ett anrop till metoden Security.allowDomain() .

När du använder taggen <img> i ett textfält vid inläsning av en extern fil (till skillnad mot att använda klassen Bitmap inbäddad i SWF) skapas automatiskt ett Loader-objekt som underordnat till TextField-objektet. Den externa filen läses in i Loader-objektet precis som om du hade använt ett Loader-objekt i ActionScript. I det här fallet returnerar metoden getImageReference() Loader-objektet som skapades automatiskt. Ingen säkerhetskontroll behövs vid åtkomst av detta Loader-objekt eftersom det ligger i samma säkerhetssandlåda som anropande kod.

Däremot gäller säkerhetsreglerna när du refererar till egenskapen content i Loader-objektet vid åtkomst till inlästa medier. Om innehållet är en bild måste du implementera en URL-principfilen och om innehållet är en SWF-fil måste metoden allowDomain() anropas av koden i SWF-filen.

Adobe AIR

I programsandlådan ignoreras <img>-taggar i ett textfält för att undvika nätfiskeattacker. Kod som körs i programsandlådan har inte heller behörighet att anropa metoden allowDomain() .

Innehåll som levereras via RTMP-servrar

I Flash Media Server används RTMP (Real-Time Media Protocol) för att återge data, ljud och video. Du kan läsa in detta medieinnehåll genom att använda metoden connect() för klassen NetConnection och skicka RTMP URL som parameter. Flash Media Server kan begränsa anslutningar och förhindra att innehåll laddas ned, baserat på den begärande filens domän. Mer information finns i dokumentationen till Flash Media Server på www.adobe.com/go/learn_fms_docs_se .

Om du vill använda metoderna BitmapData.draw() , BitmapData.drawWithQuality() och SoundMixer.computeSpectrum() för att extrahera körningsgrafik och ljuddata från RTMP-strömmar måste tillåta tillgång till servern. Använd egenskaperna Client.videoSampleAccess och Client.audioSampleAccess för ActionScript på serversidan om du vill tillåta åtkomst till särskilda kataloger på Flash Media Server. Mer information finns i Språkreferens för ActionScript på server . (Metoden drawWithQuality är tillgänglig i Flash Player 11.3 och senare; AIR 3.3 och senare.)