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,.