Inläsning av innehållFlash 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:
Läsa in SWF-filer och bilder med klassen LoaderDu 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:
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 videoAllt 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ältDu 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 AIRI 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-servrarI 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() och SoundMixer.computeSpectrum() för att extrahera körningens grafik och ljuddata från RTMP-strömmar måste du tillåta åtkomst på 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. |
|