将HTML-DOM传递给Flex的动作脚本

时间:2010-03-16 06:30:43

标签: javascript flex actionscript

我想要的只是将HTML(DOM对象)从javascript传递给Actionscript。

我看到 this article on the net 并尝试了类似的代码。 但是当我在IE中执行代码时,它会发出警告:“第18行的内存不足”。我从昨天起就被困在这里。

我会在这里发布mxml和html ..

MXML:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
    <mx:Script>
        <![CDATA[

            public function init() : void
            {
                if (ExternalInterface.available) 
                {
                    try {
                        ExternalInterface.addCallback("populateFlashFile", populateFlashFile);
                    } catch (error:SecurityError) {                    
                    } catch (error:Error) {
                    }
                } 
            }
            public function populateFlashFile(window:*) : void
            {
                log.text = window.toString(); // just for checking if window has come to the function.  
                window.document.write("Hello");
            }
            ]]>
            </mx:Script>
    <mx:TextArea x="10" y="23" width="712" height="581" id="log"/>
</mx:Application>

HTML:

<html lang="en">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body scroll="no">

<input type="button" onclick="document.getElementById('Test').populateFlashFile(window);"/>

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
            id="Test" width="100%" height="100%"
            codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
            <param name="movie" value="Test.swf" />
            <param name="quality" value="high" />
            <param name="bgcolor" value="#869ca7" />
            <param name="allowScriptAccess" value="sameDomain" />
    </object>
</body>
</html>

只有当我传递一些DOM对象时才会出现问题,如果我传递了一些它可以工作的字符串。!!! 即:
 <input type="button" onclick="document.getElementById('Test').populateFlashFile('some text here');"/>
 效果很好!

1 个答案:

答案 0 :(得分:0)

您尝试做的事情只能通过AIR实现。如果你重新检查你发布的链接,你应该看到。 这是因为AIR在包含的Tamarin上运行AS和JS。

据我所知,你只能在JS和AS之间传递原始值。也许数组和匿名对象,但我不会依赖它。

但是,你可以inject arbitrary JS into the containing HTML