如何在没有 flashvars 的情况下使用 JavaScript 自动填充弹性输入?
Posted
技术标签:
【中文标题】如何在没有 flashvars 的情况下使用 JavaScript 自动填充弹性输入?【英文标题】:How to autofill flex input by using JavaScript without flashvars? 【发布时间】:2011-12-09 13:03:27 【问题描述】:我有 flex 应用程序(swf 文件)。有谁知道如何在不使用 flashVars 的情况下从 javascript 自动填充 flex textInput?它必须在 FireFox 和 IE 中工作。
【问题讨论】:
看看ExternalInterface 不,在我的情况下它不起作用。我只有 swf 文件,没有源代码。 那恐怕做不到了。 Weel,您可以反编译,添加必要的代码并重新编译。但那你要去旅行了。 它是一个真正适用于 flashvars 的 swf 文件吗? 【参考方案1】:您可以写一个wrapper.swf
并将main.swf
加载到其中。
MyApp.mxml
- Flex 项目申请文件
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<s:HGroup id="hGroup"
horizontalAlign="center" verticalAlign="middle">
<s:TextInput id="textInput" text=""/>
</s:HGroup>
</s:Application>
Wrapper.as
- ActionScript 项目应用程序文件
package
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
import mx.core.mx_internal;
use namespace mx_internal;
public class Wrapper extends Sprite
private var loader:Loader;
private var application:Object;
public function Wrapper()
loader = new Loader();
addChild(loader);
loader.contentLoaderInfo.addEventListener(Event.INIT, loader_initHandler);
loader.load(new URLRequest("MyApp.swf"),
new LoaderContext(false, ApplicationDomain.currentDomain));
private function loader_initHandler(event:Event):void
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
private function enterFrameHandler(event:Event):void
try
application = ApplicationDomain.currentDomain.getDefinition(
"mx.core.FlexGlobals").topLevelApplication;
catch (error:*)
return; // app is not ready yet
if (!application)
return;
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
if (application.initialized)
injectText();
else
application.addEventListener("creationComplete", application_creationCompleteHandler);
private function injectText():void
var textInput:Object = application.getElementAt(0).getElementAt(0);
if (textInput)
textInput.text = "Custom value";
private function application_creationCompleteHandler(event:Event):void
injectText();
最后,您可以在包装器中添加任何逻辑,包括ExternalInterface.addCallback
。
【讨论】:
现在有一个创造性的解决方案。 +1 谢谢,但这不是我的方式。于是我意识到我的问题无法解决。以上是关于如何在没有 flashvars 的情况下使用 JavaScript 自动填充弹性输入?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swfobject.embedSWF 中使用 flashvars 属性?
如何在没有 AttributeConverter 或 customUserType 的情况下使用 Hibernate 5.2.10 MySQL JSON 支持映射到 Java 实体类?