无法在 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