我正在尝试从父文档中访问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'。
任何想法?感谢。
答案 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.
答案 3 :(得分:0)
好的......感谢所有留下建议的人。
问题是菜单动画有一个预加载器。 Firefox忽略预加载器,而IE将预加载器视为onLoad完成。因此,访问元素ID的尝试为空,因为它尚未加载。
我决定从另一个方面解决问题并从动画中读取我的书签。一旦我发现我必须将代码放在动画的第一帧中而不是在creationComplete或compositionReady中,这就变成了一个非常简单的解决方案。
这是代码: -
var bookmark = parent.window.location.hash;
bookmark = bookmark.replace("#", "");
if (bookmark == "corporate") {
sym.play("corp");
}
是的,就这么简单。