0

我正在尝试从父文档访问我的 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 中查看时将选择菜单中的 Corporate 选项卡,但在 URL 具有后缀 #corporate 时不会选择 IE。

当我在 Firefox 中为变量“corporateRectangle”插入“警报”时,它返回 [HTMLObj],而在 IE 中它返回“null”。

有什么想法吗?谢谢。

4

4 回答 4

1

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

于 2013-05-30T23:09:48.820 回答
1

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 的工作方式可能非常有问题并且特定于浏览器。

于 2013-05-31T17:16:20.800 回答
0

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

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

我决定从不同的方式解决问题,并从动画中阅读我的书签。一旦我发现我必须将代码放在动画的第一帧而不是在 creationComplete 或 compositionReady 中,结果证明这是一个非常简单的解决方案。

这是代码: -

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

是的,就这么简单。

于 2013-06-01T17:43:14.927 回答
0

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

您可以通过 1) 确保文档中没有 id/name 冲突或 2) 覆盖 IE 的本机 getElementById 方法来修复它。

在此处阅读更多相关信息。

于 2013-05-31T17:26:15.680 回答