如何在没有 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 实体类?

Flashvars 未定义

如何在 JSP 表达式语言中进行 HTML 编码?

ActionScript 3 使用FlashVars

使用 javascript 检测重定向 - 如何?