【问题标题】:Cairngorm SequenceTask + URLLoader throws SecurityError because of missing user interactionCairngorm SequenceTask + URLLoader 由于缺少用户交互而引发 SecurityError
【发布时间】:2011-07-21 16:18:48
【问题描述】:

我正在尝试让应用程序上传多个客户端生成的图像(不是文件,因此我不能使用 FileReference),同时显示上传进度。事实证明,这比它应该做的要难得多。我正在使用 Cairngorm 任务库对客户端生成的图像执行以下步骤:

  1. 生成绘制舞台区域内容的 BitmapData 对象
  2. 将图像异步编码为JPEG,以显示进度条(参见http://dgrigg.com/blog/2009/03/05/as3-jpegencoder-and-big-images/
  3. 异步上传图片(分块,参见http://soenkerohde.com/2010/01/chunk-file-upload/)以显示进度

当用户点击一个按钮时,SequenceTask 启动,编码就像一个魅力,但是当上传任务发生时,它会因为错误而火上浇油:

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

我认为这是因为您无法在没有用户干预的情况下启动 URLLoader.load 操作。即使用户正在点击按钮,我认为因为事情开始异步发生,这个点击事件不再被视为发起者。

有没有办法让 URLLoader 知道这是鼠标点击的结果?这对于分块上传的工作来说是必不可少的,因为所有后续块也会启动一个新的 URLLoader,所以我不能 100% 确定来自参考的分块上传器确实有效。我可能会先尝试只运行他们的纯代码。

感谢您的任何想法。

【问题讨论】:

    标签: flash actionscript-3 asynchronous swfupload cairngorm


    【解决方案1】:

    您必须更改应用程序流程才能在上传之前强制用户交互。

    这种行为是在 Flash Player 10 上引入的(我几乎可以肯定 Flash Player 9 上的 URLLoaders 不会发生这种情况)并且没有办法规避它,否则这将是一个主要问题安全漏洞。调度“假”鼠标事件将不起作用,上传/POST 必须在捕获用户交互(鼠标单击或键盘快捷键)的同一调用堆栈上完成。

    查看"User interaction requirements in Flash Player 10"了解更多信息。

    【讨论】:

    • 那么有没有办法显示多文件上传的上传进度呢?还是将上传推迟到异步编码之后?我是否必须进行编码,然后要求用户单击“上传”才能开始上传?
    • 显然只有在 URLLoader POST 在 Content-Disposition 标头中包含“文件名”属性时才会发生这种情况。我似乎能够通过 Base64 编码我的文件并将其作为字符串发送到 post 变量中来解决我的问题。现在我似乎无法在服务器端重新组装图像,但这似乎是一个 Ruby 问题。将发布结果。
    • Base64 编码有效。我能够发送多个 POST 请求。它在处理和传输数据方面增加了一点开销,但它解决了通过 URLLoader 上传时显示进度条的问题。
    【解决方案2】:

    您能否通过调度 MouseEvent 对象来模拟用户操作?

    我尝试通过调用 FileReference.save() 来完成我的工作(它不意味着没有用户交互就可以工作),但它可以工作,所以我的配置可能有些不同

    【讨论】:

      【解决方案3】:

      我现在遇到的问题和你的一样。我有几张图片,只有第一次上传像魅力一样工作,但在第二次上传中,它停止出现以下错误:“SecurityError: Error #2176”,看着你的帖子我意识到这是由于内部调用第二次上传而不是用户交互。

      我尝试了很多选项,其中一个是在开始下一次上传之前使用 close() 关闭 URLloader,并且出现相同的错误。诀窍是模拟用户交互。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多