Actionscript 3 选择HTML控件的DOM元素并将其DOM路径转发给Actionscript方法

Actionscript 3 选择HTML控件的DOM元素并将其DOM路径转发给Actionscript方法,actionscript-3,apache-flex,actionscript,flash-builder,flexbuilder,Actionscript 3,Apache Flex,Actionscript,Flash Builder,Flexbuilder,假设我的Flex/AIR应用程序中需要一个HTML控件 用户应该能够点击当前呈现的HTML页面的某个地方,flex应用程序应该知道用户点击的DOM元素 理想情况下,应用程序将能够检索所选元素的DOM路径。将最内部的周围DIV元素回传到某个Flex/AIR方法也可以 Q:flex是否为这项任务提供了框架?或者您知道示例代码吗?您将回调添加到HTML元素中htmloader的窗口属性中。一个简单的例子(为了方便起见使用jQuery): 此处为HTML页面:(来源) 弹性代码: <?xml ve

假设我的Flex/AIR应用程序中需要一个HTML控件

用户应该能够点击当前呈现的HTML页面的某个地方,flex应用程序应该知道用户点击的DOM元素

理想情况下,应用程序将能够检索所选元素的DOM路径。将最内部的周围DIV元素回传到某个Flex/AIR方法也可以


Q:flex是否为这项任务提供了框架?或者您知道示例代码吗?

您将回调添加到
HTML
元素中
htmloader
窗口
属性中。一个简单的例子(为了方便起见使用jQuery):

此处为HTML页面:(来源)

弹性代码:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;

            protected function html1_creationCompleteHandler(event:FlexEvent):void
            {
                // Add the click callback
                html.htmlLoader.window.flexClickCallback = function(element:Object):void
                {
                    trace("Element ID:", element.id);
                };
            }

        ]]>
    </fx:Script>

    <mx:HTML id="html" location="http://fiddle.jshell.net/w23Xx/1/show/" left="10" right="10" top="10" bottom="10" creationComplete="html1_creationCompleteHandler(event)" />

</s:WindowedApplication>

我相信您可以直接添加侦听器,但这显示了如何访问页面的
窗口

编辑:


Mike Chambers发布了一个直接在AIR应用程序中进行DOM操作的示例。

您可以在
HTML
元素中的
HTMLLoader
属性中添加一个回调。一个简单的例子(为了方便起见使用jQuery):

此处为HTML页面:(来源)

弹性代码:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;

            protected function html1_creationCompleteHandler(event:FlexEvent):void
            {
                // Add the click callback
                html.htmlLoader.window.flexClickCallback = function(element:Object):void
                {
                    trace("Element ID:", element.id);
                };
            }

        ]]>
    </fx:Script>

    <mx:HTML id="html" location="http://fiddle.jshell.net/w23Xx/1/show/" left="10" right="10" top="10" bottom="10" creationComplete="html1_creationCompleteHandler(event)" />

</s:WindowedApplication>

我相信您可以直接添加侦听器,但这显示了如何访问页面的
窗口

编辑:


Mike Chambers发布了一篇关于直接在AIR应用程序中进行DOM操作的文章。

为什么不使用ExternalInterface?@阿斯曼请再解释10个字!ExternalInterface是一个AS3类,允许您直接从flash应用程序调用JavaScript函数。它还可以添加回调函数,这样JavaScript就可以在应用程序中调用AS3函数。我更喜欢将JS与AS3分开,而不是AS3直接进行JS调用。它倾向于对开发人员更友好,更易于维护。_asMan是的,我也更喜欢这样。我要做的是选择HTML页面的元素。在下一次启动时,应用程序应根据先前拾取的元素定义的路径获取当前DOM内容。有点刮擦。为什么不使用外部接口?@阿斯曼请再解释10个字!ExternalInterface是一个AS3类,允许您直接从flash应用程序调用JavaScript函数。它还可以添加回调函数,这样JavaScript就可以在应用程序中调用AS3函数。我更喜欢将JS与AS3分开,而不是AS3直接进行JS调用。它倾向于对开发人员更友好,更易于维护。_asMan是的,我也更喜欢这样。我要做的是选择HTML页面的元素。在下一次启动时,应用程序应根据先前拾取的元素定义的路径获取当前DOM内容。有点刮擦。谢谢!现在是时候为递归遍历所有DOM元素添加一些逻辑,并为搜索中的每个元素附加一个处理程序。有没有关于如何将JS代码注入网页的提示?如果它不是我的?@StefanPantke:有关更多DOM操作指南,请参见上面编辑中添加的示例。@N Rohler请原谅,但这个解决方案比我提出的问题更具限制性。我需要加载一些/任何网页,然后解析单击的元素ID或XPath。以某种方式动态注入JS被Actionscript.Thx拒绝!现在是时候为递归遍历所有DOM元素添加一些逻辑,并为搜索中的每个元素附加一个处理程序。有没有关于如何将JS代码注入网页的提示?如果它不是我的?@StefanPantke:有关更多DOM操作指南,请参见上面编辑中添加的示例。@N Rohler请原谅,但这个解决方案比我提出的问题更具限制性。我需要加载一些/任何网页,然后解析单击的元素ID或XPath。Actionscript以某种方式拒绝动态注入JS。