gpt4 book ai didi

apache-flex - Flex 的 FileReference.save() 只能在用户事件处理程序中调用——我该如何解决这个问题?

转载 作者:行者123 更新时间:2023-12-03 11:25:29 24 4
gpt4 key购买 nike

我需要在 Web 服务调用完成后调用 FileReference.save(),但此方法有一个限制:“在 Flash Player 中,您只能成功调用此方法以响应用户事件(例如,在事件处理程序中)用于鼠标单击或按键事件)。否则,调用此方法会导致 Flash Player 引发错误异常。” (来自文档 here)

这个限制有点模糊。这是否意味着我只能从注册为某些类型用户事件的监听器的事件处理函数中调用 FileReference.save() 方法?如果是这样,那么究竟哪些用户事件是有效的? (也许有一个事件永远不会被用户与我的应用程序交互分派(dispatch),我可以为该事件类型注册一个事件处理函数并在该函数中进行 save() 调用?)

我的困难是我不能安全地调用 FileReference.save() 方法,直到我的 Web 服务返回将用作 FileReference.save() 方法调用的参数的数据,因此触发 FileReference 的事件。 save() 调用实际上是一个 ResultEvent 而不是用户事件,我对调度一个新的(假的)用户事件类型持怀疑态度,以便能够触发 FileReference.save() 调用,除非它绝对是一个用户事件永远不会因为用户与我的应用程序的实际交互而被分派(dispatch)。

简而言之,我现在正在做的是:我有一个注册为按钮单击处理程序的函数。在这个函数中,我调用 Web 服务从服务器获取数据。我还有一个结果处理函数,它在 Web 服务调用完成时被调用,我想在这里调用 FileReference.save() 方法,因为此时我知道数据已准备好保存到一份文件。但是上述限制阻止了我这样做——我收到一个错误:

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.

我已经尝试了很多方法来解决这个问题,例如使用 FileReference.save() 调用创建第二个鼠标单击事件处理函数,并在超时间隔后调用它(给 Web 服务时间来完成),但我保留遇到同样的错误——也许这种方法不起作用,因为第二个函数没有注册为用作其参数的事件类型的事件监听器。

我是 Flex 开发的新手,所以也许我只是没有以正确的方式思考这个问题。如果有人可以提出另一种方法,我将不胜感激。提前感谢您的意见或建议。

- 詹姆士

最佳答案

Adobe 将其作为一种安全措施来确保用户是那些弄乱文件而不是潜在有害代码的人。我的理解是,他们通过仅允许源自 UI 组件的(单击?)事件的处理程序执行 FileReference 方法来强制执行此操作,因此以编程方式生成您自己的事件将不起作用,尽管我没有尝试验证这一点。不幸的是,我发现的最佳解决方案是重新设计 UI 以符合此约束。在您的特定情况下,您可以使用“准备下载”之类的按钮将其设为两次单击过程,该按钮会在 Web 服务完成后更改为“下载文件”。从用户的角度来看,这并不理想,但我认为没有什么可以做的,除非您可以在显示触发 FileReference.save() 调用的按钮之前以某种方式完成 Web 服务调用。

关于apache-flex - Flex 的 FileReference.save() 只能在用户事件处理程序中调用——我该如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3301839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com