Javascript 来自父级的getElementById适用于Firefox,不适用于IE

Javascript 来自父级的getElementById适用于Firefox,不适用于IE,javascript,html,dom,adobe-edge,Javascript,Html,Dom,Adobe Edge,我正在尝试访问“边动画”动画中的一个元素,该元素是父文档中的菜单栏。元素有一个onClick事件,该事件根据父网页URL中的书签触发。我的代码在Firefox中运行良好,但在InternetExplorer10中不起作用。IE无法看到“Stage”div中的任何元素,而Firefox可以 这是我的父页面上的JavaScript代码:- <script language='javascript'> var thisPage = window.location.pathna

我正在尝试访问“边动画”动画中的一个元素,该元素是父文档中的菜单栏。元素有一个onClick事件,该事件根据父网页URL中的书签触发。我的代码在Firefox中运行良好,但在InternetExplorer10中不起作用。IE无法看到“Stage”div中的任何元素,而Firefox可以

这是我的父页面上的JavaScript代码:-

<script language='javascript'>

      var thisPage = window.location.pathname;
      var fullurl = document.URL;
      var xxx = fullurl.substring(fullurl.indexOf('#'));
      var pageString = xxx.replace("#", "");
      pageString = pageString.replace("http://www.mydomain.com/portfolio/photography.html", "");

      if (pageString == "corporate") {
            window.onload = function()  {  
            var iframe = document.getElementById('U10511_animation');
            var innerDoc = (iframe.contentDocument) ? 
            iframe.contentDocument : iframe.contentWindow.document;

            var corporateRectangle = innerDoc.getElementById('Stage_Corporate_Rectangle');
            corporateRectangle.click();   
      }   
};

</script>
当在Firefox中查看时,上述代码将选择菜单中的Corporate选项卡,但当URL具有Corporate后缀时,则不会选择IE

当我在Firefox中为变量“CorporateCtangle”插入“alert”时,它返回[HTMLObj],在IE中返回“null”


有什么想法吗?谢谢。

您是否尝试过检查控制台是否存在某种错误,以帮助您和我们理解错误?

IE JavaScript的工作方式通常与其他浏览器不同。而iFrame尤其有问题。一种可能是您获取了错误的文档,因此您正在检索的文档不存在或不包含您正在查找的元素。所以你只需要做一些调试。以下是我将如何进行的。在IE中运行脚本

1确定innerDoc是iframe.contentDocument还是iframe.contentWindow.document。确保innerDoc不为空。如果是,请尝试以不同的方式获取文档

2假设innerDoc不为null,枚举innerDoc中的所有元素。您可以按如下方式执行此操作:

for(i = 0; i < innerDoc.all.length; i++) alert(innerDoc.all [i].id);
确保您要查找的id确实在文档中。我怀疑不是这样,你需要在IE下获得一个不同的文档对象


我想你必须使用iFrame。如果没有,我建议您使用另一种方法,因为iFrame在工作方式上可能会有很多问题,并且特定于浏览器。

internet Explorer会对名称和id产生混淆-强烈建议将这两个属性视为相同

您可以通过1确保文档中没有id/名称冲突或2来修复它


好的。。。感谢所有留下建议的人

问题是菜单动画有一个预加载程序。Firefox忽略预加载程序,而IE将预加载程序视为已完成的onLoad。因此,访问元素ID的尝试为空,因为它尚未加载

我决定从另一个角度来解决这个问题,并从动画中阅读我的书签。这是一个非常简单的解决方案,因为我发现我必须将代码放在动画的第一帧中,而不是creationComplete或compositionReady中

这就是代码:-

var bookmark = parent.window.location.hash;
bookmark = bookmark.replace("#", "");
if (bookmark == "corporate") {
    sym.play("corp");
}

是的,就这么简单。

在控制台中没有任何帮助。。。只是“无法获取属性”单击“未定义或空引用”,如果IE看不到DIV,您会想到这一点。您没有使用单独的Javascript文件来实现代码。这种方法会给代码1带来一些问题。当您试图执行代码并且正在搜索当前文档中的元素时,代码2几乎不可读,并且很难维护。有时,由于页面尚未完成加载,因此无法创建您要查找的元素。最好将html和JavaScript代码分开,并使用某种库。jQuery是一个非常好的库,它有一个名为on load的方法,在加载完成时触发