0

代码流程如下:

用户单击页面上的“下载详细信息”按钮 -> 在按钮单击处理程序上使用 s:CallResponder 调用 RPC 方法 -> RPC 方法生成并返回下载文件的 URL -> 的成功事件处理程序CallResponder 获取 FileRefrence.download() 用于下载文件的 url,但会引发以下错误:-

错误:错误 #2176:某些操作(例如显示弹出窗口的操作)只能在用户交互时调用,例如通过鼠标单击或按钮按下。在 flash.net::FileReference/download()

代码如下:

<fx:Script>
    <![CDATA[            

        import mx.rpc.CallResponder;
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;

        protected function downloadButtonClickHandler(event:MouseEvent):void 
        { 
                var web_service:IWeb_service = Web_service.getInstance(); 
                getDetails.token = web_service.getURLDetails();
        } 

        public function onGetDetailsResult(event:ResultEvent):void
        {

            var response:URLResponse = event.result as URLResponse;
            if(response != null && response.url != null)
            { 
                var request:URLRequest = new URLRequest(response.url);
                fileReference.download(request, "test.html");
            }
        }

        public function onGetDetailsFault(event:FaultEvent):void
        {
            Alert.show("Error in downloading details");
        }
    ]]>    
</fx:Script>

<fx:Declarations>  
    <net:FileReference id="fileReference" />
    <s:CallResponder id="getDetails" result="onGetDetailsResult(event)" fault="onGetDetailsFault(event)"/>

</fx:Declarations>
<s:HGroup width="100%" height="100%">

       <s:Button label="Download Details" id="downloadButton" 
                          click="downloadButtonClickHandler(event)" /> 
</s:HGroup>

有没有其他方法可以实现这一点,因为 File FileReference 需要在他的情况下没有发生的用户交互?

4

3 回答 3

1

FileReference由于安全限制,如果您事先没有可用的文件,我认为没有办法通过 下载文件。

据我所知,有两种选择可以处理这种情况:

  1. 通过单独的按钮单击触发FileReference下载(例如警报对话框);
  2. 通过以下方式启动浏览器的标准下载navigateToURL(myURLRequest, "_self");

希望这可以帮助。

于 2011-10-03T10:51:06.043 回答
0
var url:String = "test.xls";

var fileReference:FileReference = new FileReference; 
var urlRequest:URLRequest = new URLRequest(url);
navigateToURL(urlRequest,"_new");

fileReference.download(urlRequest);
于 2011-10-17T13:06:07.240 回答
0

在用户单击下载按钮之前调用web_service.getURLDetails()(例如在创建 flex 应用程序之后)。如果 url 已加载,您可以检查downloadButtonClickHandler方法,或者您可以从禁用按钮开始,并在加载 url 后将状态更改为启用。

于 2011-09-28T09:19:35.343 回答