Javascript 如何使用Flex';它与IFrames的外部接口是什么?

Javascript 如何使用Flex';它与IFrames的外部接口是什么?,javascript,apache-flex,iframe,externalinterface,Javascript,Apache Flex,Iframe,Externalinterface,我有一个简单的html文档,带有一个flex应用程序和一个iframe并排(使用1x2表) flex应用程序中有一个按钮,单击该按钮时,通过使用ExInternalInterface.call方法调用javascript函数“doNavClick(URL)”,将iframe的“src”属性设置为URL 或者就是这个想法 当我在html中注释掉iframe对象声明时,对doNavClick的调用会起作用(我会弹出一个警报进行测试)……但是当iframe声明存在时,它甚至不会收到调用。这就好像ifr

我有一个简单的html文档,带有一个flex应用程序和一个iframe并排(使用1x2表)

flex应用程序中有一个按钮,单击该按钮时,通过使用ExInternalInterface.call方法调用javascript函数“doNavClick(URL)”,将iframe的“src”属性设置为URL

或者就是这个想法

当我在html中注释掉iframe对象声明时,对doNavClick的调用会起作用(我会弹出一个警报进行测试)……但是当iframe声明存在时,它甚至不会收到调用。这就好像iframe以某种方式破坏了呼叫调度机制

有工作场所吗

问题代码如下:

---Main.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                paddingLeft="0" paddingRight="0"
                paddingTop="0" paddingBottom="0"
>

  <mx:Script>
    <![CDATA[

      import flash.events.MouseEvent;

      private function doNavClick(event:MouseEvent):void
      {
        if (ExternalInterface.available)
        {
          var url:String = "http://www.google.com"
          ExternalInterface.call("doNavClick", url); // Problematic with iframes
        }
        else
        {
          mx.controls.Alert.show("External interface not available");
        }
      }

    ]]>
  </mx:Script>

  <mx:VBox width="100%" height="100%">
    <mx:Button label="Google" click="doNavClick(event)"/>
  </mx:VBox>

</mx:Application>


…以及包含swf应用程序的html/JavaScript代码:

---index.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <title>My SWF Project</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script type="text/javascript" src="swfobject.js"></script>
        <script type="text/javascript">
            swfobject.registerObject("mySWFProj", "9.0.0");
        </script>
    <style>
      html, body, div { height: 99%; }
    </style>
    </head>
    <body>
    <table border="1" width="100%" height="100%">
      <tbody>
        <tr>
          <td style="width: 25%; height: 100%">
            <div style="width: 100%; height: 100%">
              <object id="mySWFProj" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%">
                <param name="allowscriptaccess" value="always" />
                <param name="allowfullscreen" value="true" />
                <!--[if !IE]>-->
                <object type="application/x-shockwave-flash" data="mySWFProj.swf" width="100%" height="100%">
                  <param name="allowscriptaccess" value="always" />
                  <param name="allowfullscreen" value="true" />
                <!--<![endif]-->
                  <a href="http://www.adobe.com/go/getflashplayer">
                    <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
                  </a>
                <!--[if !IE]>-->
                </object>
                <!--<![endif]-->
              </object>
            </div>
          </td>
          <td style="width: 75%; height: 100%">
            <div style="width: 100%; height: 100%">
              <!-- <iframe id="htmlFrame" width="100%" height="100%" src="http://www.amazon.com"> -->
            </div>
          </td>
        </tr>
      </tbody>
    </table>

        <script type="text/javascript">

      function doNavClick(url)
      {
        alert(url);
        //document.getElementById('htmlFrame').src = url;
      }
        </script>
    </body>
</html>

我的SWF项目
注册表对象(“mySWFProj”、“9.0.0”);
html,正文,div{height:99%;}
函数doNavClick(url)
{
警报(url);
//document.getElementById('htmlFrame').src=url;
}

这段代码只会弹出一个带有谷歌url的浏览器警报。如果取消对iframe声明的注释(id为“htmlFrame”)并重新加载页面,则警报不会显示,事实上,JavaScript doNavClick(url)永远不会被调用

更新:有趣…当我检查index.html的DOM时(我使用firebug),主体通常有两个子节点-表和脚本。当iframe声明出现时,脚本子项将消失……这解释了为什么我的ExternalInterface.call永远不会出现在任何地方。为什么包含iframe会导致删除我的脚本对象


UPDATE2:将doNavScript(url)脚本移动到文档的“头”中可以解决此问题。这就好像iframe声明阻止任何其他孩子成为身体的一部分……我并不是说这就是实际发生的情况,只是这似乎是症状。

将javascript代码放在html文档的
部分


如果有人希望提供比这更完整的答案/解释,我会很高兴地将其授予“已接受”…接受我自己的答案感觉有点不对;)

你的DoNavClick()函数是什么样子的?我们需要看一些代码。我们需要看看你是如何调用函数的,页面代码是什么样子的,javascript函数看起来是什么样子的。没错……示例代码添加:)如果答案正确,应该不会感觉错,虽然我可能会推迟几天接受,看看是否有人能解释为什么iframe似乎阻止script标记出现,除非它在head标记中。好奇的人想知道。只是似乎有点骄傲地接受我自己的答案;)我不知道接受一个答案是否有时间限制(就像在奖金上一样),但我想让它保持开放状态,这样我或其他人就可以最终回答这个问题。我所提供的只是一个成功的解决方案,而不是一个解释:)