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
{
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