flex3 load flashpaper使用LocalConnection和flash通讯

国外有高手已经实现了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 connect...the 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通讯)