flex3 load flashpaper使用LocalConnection和flash通讯

flex3 load flashpaper使用LocalConnection和flash通讯
http://my.oschina.net/Boder/blog/931

国外有高手已经实现了IE浏览器内加载flashpaper,好像是这篇吧: http://www.darronschall.com/weblog/2006/11/how-to-load-flashpaper- documents-in-flex-2.cfm 这里将在他的基础上改成利用LocalConnection来通讯,以便更好的处理来回的操作. flex load flashpaper也离不开flash,这个例子其实就是用flash做一个空壳,比如命名FPload.swf这个壳就是用来加载 flashpapaer的,里面实现了对flashpaper的大小设置,缩略值,页数设置等等,注意这个fpload.swf是flash8的.在 flex中加载就得利用LocalConnection(如果不明白的得自己去想办法了解了)或者例子中的ExternalInterface跟 fpload.swf通讯,去设置尺寸,大小,页面等等 首先看flex3里面如何来加载flashpaper //com.magReader.FlashPaperLoader.as


package  com.magReader
{

    
import  flash.events.Event;
    
import  flash.events.StatusEvent;
    
import  flash.net.LocalConnection;
// import flash.system.System;

    
import  mx.controls.SWFLoader;

    
/**
     * UIComponent designed specifically to load FlashPaper documents
     * and size them correctly in the available area.
     
*/
    
public   class  FlashPaperLoader  extends  SWFLoader
    {

        
/**
         * The id of the FlashPaperLoader.swf proxy that will be used
         * for communication pyurposes.
         
*/
        
public   static   const  FLASH_PAPER_LOADED    : String  =   " flashPaperLoaded " ;
        
public   static   const  FLASH_CONNERROR        : String  =   " flashConnError " ;
        
private  var sendFlashConn:LocalConnection;
        
private  var recieveFlashConn:LocalConnection;
        
/**
         * The name of the application that is loading in the FlashPaperLoader.swf
         * file.  This name must correspond to the "id" attribute in the object tag
         * and the "name" attribute in the embed tag when the Flex client is embedded
         * into the html page.
         
*/

        
/**
         * Constructor
         
*/
        
public  function FlashPaperLoader()
        {
            
// source = "app-storage:/data/fpHolder.swf";
            sendFlashConn = new  LocalConnection();
            recieveFlashConn 
=   new  LocalConnection();
            recieveFlashConn.client
= this ;
            sendFlashConn.addEventListener(StatusEvent.STATUS, onStatus);
            sendFlashConn.allowDomain(
" * " );
            recieveFlashConn.allowDomain(
" * " );
            sendConn();
        }
        
public  function sendConn(): void
        {
            
try
            {
                recieveFlashConn.connect(
" _flexloader " );
            } 
catch  (error:ArgumentError) {
                trace(
" Can't connectthe connection name is already being used by another SWF " );
                onConnError();
                
return ;
            }
        }

        
private  function onStatus(result:StatusEvent) : void {

            trace (result.level 
==   " error " ? " Operation failed " : " Operation succeeded " );

        }
        
// 连接源出错
         private  function onConnError(): void
        {
            
// errUnload();

            var e:Event
= new  Event(FlashPaperLoader.FLASH_CONNERROR);
            dispatchEvent( e );
        }

        
//  =================================================================
        
//   Expose methods that are proxied from FlashPaperLoader.swf - Call
        
//   JavaScript methods that the FlashPaperLoader.swf file picks up
        
//   and passes to the loaded FlashPaper document.
        
//  =================================================================

        
public  function setSize( width:Number, height:Number ): void
        {
            trace(
" =========setPaperSize============= " );
            sendFlashConn.send(
" _flashpaperloader " , " setPaperSize " ,width,height);
        }
        
/**
         * 文档加载成功提示
         * 
*/
        
public  function fpLoaded(): void
        {
            trace(
" reveice fpLoaded message!! this.width =  "   +   this .width  +   "  this.height "   +   this .height);
            
// setSize(parent.width,parent.height);
            var e:Event = new  Event(FlashPaperLoader.FLASH_PAPER_LOADED);
            dispatchEvent( e );
            
// this.visible=true;
        }
        
/**
         * 设置缩放
         * 
*/
        
public  function setZoom(value:Object): void
        {
            
if  ( this .visible)
            {
                sendFlashConn.send(
" _flashpaperloader " , " setCurrentZoom " ,value);
            }
        }

//     override protected function updateDisplayList( unscaledWidth:Number,
//                                                    unscaledHeight:Number ):void
//     {
//         if ( contentHolder )
//         {
//              //  Adjust values so the FlashPaper document is displayed correctly
//             contentHolder.scaleX = 1.0;
//             contentHolder.scaleY = 1.0;
//             contentHolder.x = 0;
//             contentHolder.y = 0;
//     
//             contentHolder.scrollRect = new Rectangle( 0, 0, unscaledWidth, unscaledHeight );
//     
//              //  When the content has loaded, call the setSize method so that the
//              //  FlashPaper document sizes right in the available area
//             if ( Loader( contentHolder ).content )
//             {
//                 setSize( unscaledWidth, unscaledHeight );
//                  // this.setFocus();
//             }
//         }
//     }

        
// 卸载此swf
         public  function unload(): void
        {
            
if (sendFlashConn  !=   null
            {
                sendFlashConn.send(
" _flashpaperloader " , " unload " );
                sendFlashConn 
=   null ;
            }
            
try
            {
                
if (recieveFlashConn  !=   null
                {
                    recieveFlashConn.close();
                    recieveFlashConn 
=   null ;
                }
            }
catch (e:ArgumentError)
            {
                trace(e.toString());
                recieveFlashConn 
=   null ;
            }

            unloadAndStop(
true );
            
// System.gc();
        }
        
public  function errUnload(): void
        {
            
if (sendFlashConn  !=   null
            {
                sendFlashConn.send(
" _flashpaperloader " , " unload " );
                sendFlashConn 
=   null ;
            }
            
if (recieveFlashConn  !=   null ) recieveFlashConn  =   null ;
            unloadAndStop(
true );
            
// System.gc();
        }

    } 
//  end class
//  end package


你可能感兴趣的:(flex3 load flashpaper使用LocalConnection和flash通讯)