我有控制栏按钮复制,剪切和粘贴,他们想要从剪贴板复制/粘贴一些文本/对象。
复制/剪切工作正常。 使用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 事件
但是我必须实现粘贴控制栏按钮。我这样做了吗?
答案 0 :(得分:2)
要克服Flash Player强加的安全限制,您可以使用Flash Local共享对象模拟系统剪贴板的功能,例如在http://joeberkovitz.com/blog/2008/12/12/clipboard-using-local-shared-objects/中首次使用它,或者通过ExternalInterface使用Javascript API从剪贴板中检索数据
答案 1 :(得分:1)
我唯一能找到的就是能够使用自定义上下文菜单进行粘贴。你可以找到一个example on how to do that here。我自己尝试调度“粘贴”事件,玩家似乎以某种方式检测到粘贴来自上下文菜单或键盘 - 不完全确定它是如何做到的或为什么会这样。我希望其他人可以提供更多的澄清,但与此同时,上下文菜单会有效吗?
更新:我认为没有办法强制粘贴事件。我一直在运行一些测试,这似乎是让这个事件分派并允许调用Clipboard.generalClipboard.setContents方法而没有安全错误的唯一方法是响应全局粘贴事件,只能调度“安全地“从上下文菜单或键盘事件(ctrl + V或平台等效。)抱歉。
答案 2 :(得分:0)
在其他编程环境中,我发现从按钮触发剪贴板粘贴操作不起作用,因为在粘贴操作发生之前,按钮本身会远离目标编辑控件获得焦点。这可能是这种情况吗?
答案 3 :(得分:-1)
为了避免异常安全性,事件的目标必须是应用程序的阶段对象。我没有在任何文档中找到这些信息,这是我自己的经验。希望它有效。