Flex:Error #2176 解决

Categories: Flex; Tagged with: ; @ May 15th, 2010 14:00

Error: Error #2176: Certain actions, such as those that display a pop-up window, may only be invoked upon user interaction, for example by a mouse click or button press.

 

做AIR开发时经常会忘记浏览器版本的安全限制, 导致在build为swf之后出现此类问题.

为了保持AIR上的UI, 同时支持浏览器版本, 可预先根据运行环境进行分类处理.

如下, 描述通过点击按钮, 直接下载某文件的解决方案:

AIR中可直接使用, 但浏览器版本会有安全错误.

在浏览器版本时, 点击按钮后不会立即激发下载,而是显示label,用户点击后再进行下载. AIR中点击按钮直接下载:


// onAction 处理...
		if(SystemUtils.isAirEnvironment()) { // AIR下直接下载
			labelDownloadLink.visible = false;
			downloadReportFile(); // 直接下载.
		}else if(SystemUtils.isBrowserEnvironment()) { // 浏览器环境下, 因安全策略限制, 显示Label, 通过点击label进行下载.
			labelDownloadLink.visible = true;
			labelDownloadLink.text = RM.getString(BUNDLE_ATHENA, "download");
		}else {
			// donothing.
		}

	/** 在浏览器版本中使用Label进行下载. */
	protected function onDownlinkClicked(e:MouseEvent):void {
		if(!StringUtils.isEmptyString(_pathReportFile)){
			downloadReportFile();
		}
	}

	/** 开始现在报表文件, Air/Broswer 共用. */
	protected function downloadReportFile():void {
		var fileRef:FileReference = new FileReference();
		var urlReq:URLRequest = new URLRequest(_pathReportFile);
....
		fileRef.download(urlReq, (dgRecReportPlans.selectedItem as AssessReportPlan).nameFull + ".xls");
	}



// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.