[flex] FlexPaper进行去除logo二次开发后,为什么JS调用Flex API事件(如onCurrentPageChanged等)无效了?

fjsm200 2013-12-25

1. 入口文件 testFlex.mxml代码如下

<?xml version="1.0" encoding="utf-8"?>  
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
				xmlns:fp="com.devaldi.controls.flexpaper.*" 
				layout="absolute" width="100%" height="100%"   
				applicationComplete="initApp();">  
	
	<mx:Metadata>  
		[ResourceBundle("FlexPaper")]  
		[Event(name="onDocumentLoaded", type="com.devaldi.events.DocumentLoadedEvent")]  
		[Event(name="onLoadingProgress", type="flash.events.ProgressEvent")]  
		[Event(name="onDocumentLoadedError", type="flash.events.ErrorEvent")]  
		[Event(name="onCurrPageChanged", type="com.devaldi.events.CurrentPageChangedEvent")]  
		[Event(name="onDocumentLoading", type="flash.events.Event")]  
		[Event(name="onExternalLinkClicked", type="com.devaldi.events.ExternalLinkClickedEvent")]  
		[Event(name="onDocumentPrinted", type="com.devaldi.events.DocumentPrintedEvent")]  
		[Event(name="onPageLoaded", type="com.devaldi.events.PageLoadedEvent")]  
		[Event(name="onPageLoading", type="com.devaldi.events.PageLoadingEvent")]  
		[Event(name="onErrorLoadingPage", type="com.devaldi.events.ErrorLoadingPageEvent")]
		[Event(name="onScaleChanged", type="com.devaldi.events.ScaleChangedEvent")]
		[Event(name="onFitModeChanged", type="com.devaldi.events.FitModeChangedEvent")]
		[Event(name="onViewModeChanged", type="com.devaldi.events.ViewModeChangedEvent")]
		[Event(name="onCursorModeChanged", type="com.devaldi.events.CursorModeChangedEvent")]
		
		
	</mx:Metadata>  
	
	<mx:Script>  
		<![CDATA[  
			import mx.controls.Alert; 
			import com.devaldi.events.CurrentPageChangedEvent; 
			import com.devaldi.events.CursorModeChangedEvent; 
			import com.devaldi.events.DocumentLoadedEvent; 
			import com.devaldi.events.DocumentPrintedEvent; 
			import com.devaldi.events.ErrorLoadingPageEvent; 
			import com.devaldi.events.ExternalLinkClickedEvent; 
			import com.devaldi.events.FitModeChangedEvent; 
			import com.devaldi.events.ScaleChangedEvent; 
			import com.devaldi.events.ViewModeChangedEvent; 
			import com.devaldi.events.PageLoadedEvent;
			import com.devaldi.events.PageLoadingEvent;
			
			[Bindable]  
			public var _Scale:Number = 1;//缩放比例  
			
			[Bindable]  
			public var _SwfFile:String = "";//SWF文件路径  
			
			[Bindable]  
			public var _ZoomTransition:String = "easeOut";  
			
			[Bindable]  
			public var _ZoomTime:Number = 0.6;  
			
			[Bindable]  
			public var _ZoomInterval:Number = 0.1;  
			
			[Bindable]  
			public var _FitPageOnLoad:Boolean = false;//加载后适合高度  
			
			[Bindable]  
			public var _FitWidthOnLoad:Boolean = false;//加载后适合宽度  
			
			[Bindable]  
			public var _PrintEnabled:Boolean = true;//是否支持打印  
			
			[Bindable]  
			public var _FullScreenAsMaxWindow:Boolean = false;//是否支付全屏  
			
			[Bindable]  
			public var _ProgressiveLoading:Boolean = false;//是否延迟加载  
			
			[Bindable]  
			public var _localeChain:String = "zh_CN";//语言  
			
			private var isFocus:Boolean = false;  
			
			[Bindable(event="onCurrPageChanged")]
			
			//初始化参数  
			private function initApp():void{  
				var params:Object = Application.application.parameters;  
				_Scale = getNumber(params, "Scale", 1);  
				_SwfFile = getString(params, "SwfFile", "Paper.swf");  
				_ZoomTransition = getString(params, "ZoomTransition", "easeOut");  
				_ZoomTime = getNumber(params, "ZoomTime", 0.6);  
				_ZoomInterval = getNumber(params, "ZoomInterval", 0.1);  
				_FitPageOnLoad = getBoolean(params, "FitPageOnLoad", false);  
				_FitWidthOnLoad = getBoolean(params, "FitWidthOnLoad", false);  
				_PrintEnabled = getBoolean(params, "PrintEnabled", true);  
				_FullScreenAsMaxWindow = getBoolean(params, "FullScreenAsMaxWindow", false);  
				_ProgressiveLoading = getBoolean(params, "ProgressiveLoading", true);  
				_localeChain = params["localeChain"];  
				
				//注册事件监听  
				this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);  
				this.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);  
				this.addEventListener(MouseEvent.CLICK,setFocusTo);  
				//this.addEventListener("onPageLoaded",pageLoadedEventHandler);   
				
				
				//开放给外部(javascript)调用  
				ExternalInterface.addCallback("gotoPage", gotoPage);
				ExternalInterface.addCallback("fitWidth", fitWidth);
				ExternalInterface.addCallback("fitHeight", fitHeight);
				ExternalInterface.addCallback("getCurrPage", getCurrPage);
				ExternalInterface.addCallback("startPage", startPage);
				ExternalInterface.addCallback("nextPage", nextPage);
				ExternalInterface.addCallback("prevPage", prevPage);
				ExternalInterface.addCallback("setZoom", setZoom);
				ExternalInterface.addCallback("searchText", searchText);
				ExternalInterface.addCallback("switchMode", switchMode);
				ExternalInterface.addCallback("printPapers", printPapers);
				ExternalInterface.addCallback("highlight", highlight);
				ExternalInterface.addCallback("postSnapshot", postSnapshot);
				
				ExternalInterface.addCallback("loadSwf", loadSwf);//初始化加载swf文件,
				ExternalInterface.addCallback("loadSwfInStartPage", loadSwfInStartPage);//初始化加载swf文件,从第N页开始
				
				ExternalInterface.addCallback("onDocumentLoaded", documentLoadedHandler);
			}  
			
			
			
			
			//*********************函数****************************
			public function hasFocus():Boolean{  
				//Alert.show("hasFocus");  
				return isFocus;  
			}  
			
			public function setViewerFocus(isFocus:Boolean):void{    
				//Alert.show("setViewerFocus");  
				this.FlexPaper.setViewerFocus();  
			}  
			
			public function startPage(n:Number):void{
				FlexPaper.startPage(n);
			}
			
			private function getString(params:Object, name:String, def:String):String{  
				if(params[name] != null){  
					return params[name];  
				}  
				return def;  
			}  
			
			private function getNumber(params:Object, name:String, def:Number):Number{  
				if(params[name] != null){  
					return params[name];  
				}  
				return def;  
			}  
			
			private function getBoolean(params:Object, name:String, def:Boolean):Boolean{  
				if(params[name] != null){  
					return params[name] == "true";  
				}   
				return def;  
			}  
			
			public function gotoPage(p:Number):void{
				FlexPaper.gotoPage(p);
			}
			public function fitWidth():void{
				FlexPaper.fitWidth();
			}
			public function fitHeight():void{
				FlexPaper.fitHeight();
			}
			public function getCurrPage():Number{
				return FlexPaper.getCurrPage();
			}
			public function nextPage():void{
				FlexPaper.nextPage();
			}		
			
			public function prevPage():void{
				return FlexPaper.prevPage();
			}
			public function setZoom(factor:Number):void{
				FlexPaper.setZoom(factor);
			}
			public  function searchText(text:String):void{
				FlexPaper.searchText(text);				
			}
			public function switchMode(mode:String):void{
				FlexPaper.switchMode(mode);
			}
			public function printPapers():void{
				FlexPaper.printPapers();
			}
			public  function highlight(url:String):void{
				FlexPaper.highlight(url);
			}
			public  function postSnapshot(url:String):void{
				FlexPaper.postSnapshot(url);
			}
			public function loadSwfInStartPage(n:Number,s:String):void{
				//FlexPaper.loadSwfInStartPage(n,s);
			}
			public function loadSwf(s:String):void{
				FlexPaper.loadSwf(s);
			}
			
			
			//*********************事件***************
			protected function onLoadedError(event:ErrorEvent):void{ 
				dispatchEvent(event);    
			} 
			private function setFocusTo(e:MouseEvent):void{ 
				stage.stageFocusRect = false; 
				stage.focus = e.target as InteractiveObject; 
			} 
			private function onMouseOver(event:MouseEvent):void{ 
				this.isFocus = true; 
			} 
			
			private function onMouseOut(event:MouseEvent):void{ 
				this.isFocus = false; 
			} 
			
			protected function onCurrPageChanged(event:CurrentPageChangedEvent):void{ 
				dispatchEvent(event); 
			} 
			protected function documentLoadedErrorHandler(event:Event):void{ 
				dispatchEvent(event); 
			} 
			
			protected function onExternalLinkClickedHandler(event:ExternalLinkClickedEvent):void{ 
				dispatchEvent(event); 
			} 
			
			protected function onDocumentLoadingProgressHandler(event:ProgressEvent):void{ 
				dispatchEvent(event); 
			} 
			
			protected function papersLoadingHandler(event:Event):void{ 
				dispatchEvent(event); 
			} 
			
			protected function pageLoadingEventHandler(event:Event):void{ 
				dispatchEvent(event); 
			} 
			
			protected function documentPrintedHandler(event:DocumentPrintedEvent):void{ 
				dispatchEvent(event); 
			} 
			
			protected function documentLoadedHandler(event:Event):void{ 
				Alert.show("***loaded1****");
			}    
			
			protected function pageLoadedEventHandler(event:Event):void{ 
				dispatchEvent(event); 
			} 
			
			protected function errorLoadingPageEventHandler(event:ErrorLoadingPageEvent):void{ 
				dispatchEvent(event); 
			} 
			protected function onScaleChanged(event:Event):void{ 
				dispatchEvent(event); 
			} 
			protected function onFitModeChanged(event:Event):void{ 
				dispatchEvent(event); 
			}
			protected function onViewModeChanged(event:Event):void{ 
				dispatchEvent(event); 
			}
			protected function onCursorModeChanged(event:Event):void{ 
				dispatchEvent(event); 
			}
			
			
			
		]]>  
	</mx:Script>  
	
	
	<fp:FlexPaperViewer id="FlexPaper" 
						width="100%"   
						height="100%"  
						
						onDocumentLoaded="documentLoadedHandler(event)"   
						onDocumentLoading="papersLoadingHandler(event)"  
						onDocumentLoadedError="documentLoadedErrorHandler(event)"  
						onLoadingProgress="onDocumentLoadingProgressHandler(event)"  
						onCurrPageChanged="onCurrPageChanged(event)"  
						onExternalLinkClicked="onExternalLinkClickedHandler(event)"   
						onDocumentPrinted="documentPrintedHandler(event)"  
						onPageLoaded="pageLoadedEventHandler(event)"  
						onPageLoading="pageLoadingEventHandler(event)"  
						onErrorLoadingPage="errorLoadingPageEventHandler(event)"
						onScaleChanged="onScaleChanged(event)"
						onFitModeChanged="onFitModeChanged(event)"
						onViewModeChanged="onViewModeChanged(event)"
						onCursorModeChanged="onCursorModeChanged(event)"
						
						
						Scale="{_Scale}"   
						SwfFile="{_SwfFile}"   
						ZoomTransition="{_ZoomTransition}"   
						ZoomTime="{_ZoomTime}"   
						ZoomInterval="{_ZoomInterval}" 
						FitPageOnLoad="{_FitPageOnLoad}" 
						FitWidthOnLoad="{_FitWidthOnLoad}" 
						PrintEnabled="{_PrintEnabled}" 
						FullScreenAsMaxWindow="{_FullScreenAsMaxWindow}" 
						ProgressiveLoading="{_ProgressiveLoading}" />  
</mx:Application>

 2. 去除logo图片代码

     修改Viewer.as  大概在170来行

private var _skinImg:Bitmap = new Bitmap();//去掉右下角的log图片

    修改DupImage.as文件 大概在50行  

private var _skinImgl:Bitmap = new Bitmap();

问题:就修改了第二点中的文件,其他内容没有进行修改,现在问题是,我将testFlex.mxml编译成testFlex.swf文件后,改名成FlexPaperViewer.swf替换官方的FlexPaperViewer.swf使用,结果发现FlexPapler_flash_debug.js文件中的onDocumentLoadedError,onDocumentLoading等一些列方法无效了?请问下这是什么原因照成的,是不是我的textFlex.mxml文件中写的不对。谢谢。

hxd_123 2018-03-22
你好,我也遇到这个问题了,研究了两三天了,请问最后是怎么解决的???非常感谢。
wo746121406 2018-04-10
解决了吗?
hellobug 2019-01-17
入口的mxml的响应事件方法中不要用dispatchEvent 用
ExternalInterface.call("onCurrPageChanged",event.pageNum);
Global site tag (gtag.js) - Google Analytics