【问题标题】:Paste text from Clipboard using button使用按钮从剪贴板粘贴文本
【发布时间】:2009-12-01 18:39:31
【问题描述】:

我有控制栏按钮复制、剪切和粘贴,它们假设从剪贴板复制/粘贴一些文本/对象。

复制/剪切工作正常。 使用 CTRL+V 和上下文菜单粘贴也可以正常工作。

但是当我尝试通过控制栏按钮单击处理程序访问剪贴板时,它会抛出错误

SecurityError: Error #2179: The Clipboard.generalClipboard object may only be read while processing a flash.events.Event.PASTE event.
at flash.desktop::Clipboard/getObjectReference()
at flash.desktop::Clipboard/convertNativeFormat()
at flash.desktop::Clipboard/getOriginal()
at flash.desktop::Clipboard/getData()
... 2 more

我知道这是安全问题。

方法 Clipboard.generalClipboard.getData() 可用于读取内容 系统剪贴板,但仅当它 从事件处理程序中调用 处理 flash.events.Event.PASTE 事件。

但我必须实现粘贴控制栏按钮。我应该这样做吗?

【问题讨论】:

    标签: apache-flex clipboard paste


    【解决方案1】:

    要克服 Flash Player 施加的这种安全限制,您可以使用 Flash 本地共享对象模拟系统剪贴板的功能,就像在 http://joeberkovitz.com/blog/2008/12/12/clipboard-using-local-shared-objects/ 首次建议的那样,或者通过 ExternalInterface 使用 Javascript API 从剪贴板中检索数据。

    【讨论】:

      【解决方案2】:

      我唯一能找到的是使用自定义上下文菜单进行粘贴的功能。您可以找到example on how to do that here。我试过自己发送“粘贴”事件,玩家似乎以某种方式检测到粘贴来自上下文菜单或键盘 - 不完全确定它是如何做到的或为什么会这样。我希望其他人可以提供更多说明,但与此同时,上下文菜单是否有效?

      更新:我认为没有任何方法可以强制粘贴事件。我一直在运行一些测试,似乎让这个事件调度并允许在没有安全错误的情况下调用 Clipboard.generalClipboard.setContents 方法的唯一方法是响应只能调度的全局粘贴事件“安全”来自上下文菜单或键盘事件(ctrl+V 或平台等效项)。抱歉。

      【讨论】:

        【解决方案3】:

        在其他编程环境中,我发现从按钮触发剪贴板粘贴操作不起作用,因为按钮本身在粘贴操作发生之前获得焦点,远离目标编辑控件。会是这种情况吗?

        【讨论】:

          【解决方案4】:

          为了避免异常安全,事件的目标必须是应用程序的阶段对象。我没有在任何文档中找到此信息,这是根据我自己的经验。希望它有效。

          【讨论】:

          • 看来您要么误解了问题,要么发现了 Flash Player 中的安全漏洞。你能给我们一个示例代码吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多