1

我有这个示例页面,我试图将页面内每个 youtube 元素的 wmode 设置为“透明”。

为此,我需要在页面中获取所有“object > params”和“embed”标签。我链接你的页面在所有浏览器中都像魅力一样工作,除了 IE6(还没有检查其他 IE)。使用 IE6 我无法捕获“参数”,因为document.getElementsByTagName('param')返回一个空对象,但“嵌入”不会发生这种情况!document.getElementsByTagName('object')它也不起作用

这是页面http://dl.dropbox.com/u/4064417/provaJs.html

有什么建议为什么它不只返回“param”标签?

先感谢您!

4

3 回答 3

1

<param/>我记得tag 和的一些问题getElementsByTagName,但是我不在 IE6 中编码已经很长时间了。而不是查询 from document,而是尝试getElementsByTagName<object />自身获取参数调用并查看它是否有帮助:

var objects = document.getElementsByTagName("object");

for (var i = 0, object; object = objects[i++];) {
    var params = object.getElementsByTagName("param");

    alert(params.length);
}
于 2012-03-31T13:37:37.533 回答
1

我了解您希望让您的应用程序保持向后兼容,但是这个练习与行业的总体方向及其让 IE6 停止的努力背道而驰(甚至谷歌也放弃了对 IE6 的支持)。如果您专注于为伪现代浏览器构建更好的 Web 体验而不是担心旧版浏览器,那么您的时间可能会得到更好的投入。

深思熟虑 - 也许使用浏览器检测脚本并鼓励您的用户升级,以便他们能够体验您的网站的所有现代荣耀:)

话虽如此,ZER0 的建议是完全正确的。在页面中找到“对象”标签,然后遍历其子标签,直到找到您要查找的标签。如果您似乎无法使用 getElementsByTagName 获取对象标签,您可能必须遍历 document.body.childNodes 节点列表,一路检查typeof(N) 或 N.NodeName

于 2012-03-31T14:06:27.973 回答
0

如果您必须支持旧版 IE6 浏览器,我强烈建议您使用 jQuery 等库,而不是尝试直接访问 DOM。

IE6 有大量的错误和怪癖,甚至可以破坏最简单和最无害的 Javascript 代码。jQuery 竭尽全力将这些浏览器错误和缺陷从开发人员手中抽象出来,让您可以编写适用于所有浏览器的代码。

例如document.getElementsByTagName('object'),您可以使用 jQuery 代码而不是使用$('object'),这将为您提供相同的最终结果,但可以解决最终用户正在运行的任何浏览器中的任何错误。

当然,jQuery 不仅仅是隐藏浏览器错误,但如果您使用的是 IE6,那么仅此一项就足以成为使用它的充分理由。

(如果您出于某种原因真的不喜欢 jQuery,当然可以使用其他库)

于 2012-04-08T20:41:45.993 回答