无法在 AIR 中加载的 SWF 中的文本字段上进行复制/粘贴

Posted

技术标签:

【中文标题】无法在 AIR 中加载的 SWF 中的文本字段上进行复制/粘贴【英文标题】:Unable to do copy/paste on textfields in loaded SWFs in AIR 【发布时间】:2013-03-23 20:43:00 【问题描述】:

我的 AIR 应用程序正在加载一个 SWF 文件,其中包含一个用于输入的文本字段。我可以在文本字段中输入,但复制和粘贴被破坏。当我尝试使用键盘快捷键粘贴某些内容时,文本字段变成这样:

(这不是“T”)。

经过一系列的复制/粘贴后,它看起来像这样:

当我右键单击文本字段时,没有任何反应,没有出现带有复制/粘贴选项的上下文菜单。

正在加载的 SWF 位于 AS2 中(实际上不可能将其移植到 AS3,因为其中的代码非常庞大和复杂)。我无法替换那个 SWF,它对我的​​项目具有极高的价值。除了这个麻烦,SWF 工作正常。也许我可以在加载器的 AS3 设置中更改一些配置常量?

出于测试目的,我创建了两个 .flas,一个在 AS2 中并包含一个文本字段,另一个在 AS3 中并加载文本字段。您可以下载存档中的 .flas from here。

【问题讨论】:

没有 AS2-AS3 通信可能这会影响您?您是否尝试过在其他 SWF 中加载示例 SWF (AS3) 并测试此复制和粘贴问题? @Lukasz'Severiaan'Grela SWF 间的交流与此无关。您可以从我附加的两个 .flas 中确定这一点。 【参考方案1】:

这是肮脏的黑客,但它有效。 :) “即时”将 SWF 从 AVM1 转换为 AVM2。使用 ForcibleLoader https://code.google.com/p/as3-classes/source/browse/trunk/org/lzyy/util/ForcibleLoader.as

在 loader.fla 中:

var loader:Loader = Loader(addChild(new Loader()));
var fLoader:ForcibleLoader = new ForcibleLoader(loader);
fLoader.load(new URLRequest('tf.swf'));

在 ForcibleLoader.as 中添加import flash.system.LoaderContext;

var lc:LoaderContext = new LoaderContext();
lc.allowCodeImport = true;
loader.loadBytes(inputBytes, lc);

改为

loader.loadBytes(inputBytes);

在 ~75 行

【讨论】:

这简直太棒了!你让我开心,先生!太感谢了!现在将进一步研究 AVM1/AVM2 主题。 啊!我刚刚用实际的 SWF 检查了它,虽然它加载了所有的图形,但它并没有从加载的 SWF 运行任何代码! :(我错过了什么? 如果您在 AS2 .fla 的文本字段中放置实例名称,例如tf,并将 ActionScript 添加到第一帧,如 tf.text = "Hello";,它将在 AS2 中有效,但在 AS3 中无效!帮助。 坏消息:(不知道...(顺便说一句:Shift-Insert 按预期粘贴)

以上是关于无法在 AIR 中加载的 SWF 中的文本字段上进行复制/粘贴的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WKWebView 中加载的页面中的隐藏字段中获取值绑定

Adobe Air 加载内部带有 allowDomain('*') 的外部 swf

加载的SWF将无法在空中执行其功能

如何在Adobe Air上运行现有的SWF文件

Android:WebView 中加载的图像中的像素质量降低

无法访问 iframe 中加载的自己域上的 httponly 标记 cookie