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

时间:2013-05-30 20:13:05

标签: javascript html dom adobe-edge

我正在尝试从父文档中访问Edge Animate动画中的元素(这是一个菜单栏)。该元素具有onClick事件,该事件根据父网页的URL中的#bookmark进行触发。我的代码在Firefox中完美运行,但在Internet Explorer(10)中不起作用。 IE无法在“舞台”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中查看菜单中的“公司”选项卡,但在URL后缀为#corporate时,不会选择IE。

当我在Firefox中为变量'corporateRectangle'插入'alert'时,它返回[HTMLObj]并在IE中返回'null'。

任何想法?感谢。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

IE JavaScript的工作方式通常与其他浏览器不同。 iframe特别成问题。一种可能性是您获取了错误的文档,因此您检索的文档不存在或者不包含您要查找的元素。所以你只需要做一些调试。我将继续这样做。在IE中运行您的脚本。

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

2)假设innerDoc不为null,则枚举innerDoc中的所有元素。你可以这样做:

for(i = 0; i < innerDoc.all.length; i++) alert(innerDoc.all [i].id);

确保您要查找的ID实际上在文档中。我怀疑它不是,你需要在IE下获得一个不同的文档对象。

我认为你不得不使用iframe。如果没有,我建议您使用不同的方法,因为iframe可能非常有问题,并且在浏览器特定方面也可以使用。

答案 2 :(得分:0)

Internet Explorer对名称和ID感到困惑 - 强烈建议将这两个属性视为相同。

您可以通过以下方式解决问题:1)确保文档中没有ID /名称冲突,或者2) override IE's native getElementById-method.

Read more about it here.

答案 3 :(得分:0)

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

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

我决定从另一个方面解决问题并从动画中读取我的书签。一旦我发现我必须将代码放在动画的第一帧中而不是在creationComplete或compositionReady中,这就变成了一个非常简单的解决方案。

这是代码: -

var bookmark = parent.window.location.hash;
bookmark = bookmark.replace("#", "");
if (bookmark == "corporate") {
    sym.play("corp");
}
是的,就这么简单。