2012-03-19 95 views
0

我们在IE6到IE8的浏览器上支持一个旧的基于Web的应用程序,JavaScript和css对于IE来说非常具体。现在我们要支持IE9。在我们的javascript中,有许多语法在IE9中不受支持,例如使用点(.)访问元素实例的HTML属性,而不是setAttributegetAttribute以有组织的方式支持新浏览器

我只是想知道什么是支持更多浏览器版本或支持不同浏览器的最佳方式。

我在想使用jQuery来访问所有浏览器的非标准功能,或者编写一个名为browser的类有getAttribute这样的方法,然后像IE7和IE9这样的不同的类以它们特定的方式在加载时重载此方法。

我想使用最好的方式和用户在这种情况下使用的方法。

setAttribute和GetAttribute只是简单的例子,还有很多例如访问我们使用document.all.elementName的元素引用,这是在Firefox的早期版本中不支持的。所以如何将所有这些代码转换为Jquery或另一个库。 有更多的问题,然后设置和获取属性,问题的焦点是什么旧的javascript转换为支持的JavaScript在所有浏览器

感谢

最好的办法
+1

我肯定会劝下去jQuery的路线,因为我已经做了同样的事情(用它来针对不同的浏览器/版本)和更多的时候不是,它的工作原理治疗。 – 2012-03-19 12:32:41

+3

你写的关于使用“的setAttribute”和“的getAttribute”是什么让我觉得你有更多的问题比你知道的,因为这些并非总是正确的事做对旧的浏览器无论是。事实上,如果您使用这些机制访问应该被视为DOM元素属性的东西,那么绝大多数的东西都不会工作。 – Pointy 2012-03-19 12:38:34

回答

1

如果您有大量专门为IE < 9编写的代码,您希望在其他浏览器中工作,则首先需要标识所有IE特定代码,然后用跨浏览器代码替换它。我不认为任何特定的图书馆都会对此有所帮助,实际上POJS可能更容易。例如,您可以使用document.getElementById来监督更换document.all,但是您不能使用$(其中$来自jQuery或Prototype或其他任何项目)执行此操作。

使用点属性访问和非标准属性会产生问题,但是如果将它们设置为属性,那么您将会很好(尽管原则上这样做不是个好主意)。顺便提一句,jQuery不会“覆盖”get/setAttribute,它有自己的attrprop方法。

最终,你将有可能最终从头开始重写了整个事情。请记住,不要针对特定​​的浏览器版本,支持标准,并在必要时使用feature detection以及良好的回退策略来解决非标准行为。

+0

感谢您的反馈,我喜欢使用功能检测而不是检查浏览器的建议 – daljit 2012-03-20 12:19:06

2

绝对推荐与库要平滑过度浏览器差异并提供许多有用的实用功能。有很多选择:jQueryYUIClosure,Prototypeany of several others。 jQuery是hugely dominant at the moment因此可以更容易地找到熟悉它的人(并且它有活跃的开发资源,赞助等),但是您选择的库取决于您。

还强烈建议在DOM2 HTML specification和HTML5规范的Web Application APIs部分密切关注,因为有您要使用的属性的反射属性,而不是getAttribute/setAttribute倍。例如,element.id是引用元素ID的完全有效的跨浏览器方式;你不需要使用element.getAttribute("id")。同样,你想要使用element.className而不是element.getAttribute("class")(它在某些早期版本的IE上工作不正确)。的确,IE8和更早的版本还将其他属性放在任意属性的元素上(例如,如果元素上有foo属性,则可以将其存储为element.foo,或者如果您有data-foo,则可以使用element['data-foo']),而IE9和其他浏览器不要(有很好的理由!),但对于标准属性,通常会有反射属性。

如果您在元素上使用任意属性,还建议根据HTML5规范将其名称更改为the data-* format

+0

感谢您的反馈,如果我去任何图书馆,这将是jQuery和感谢有用的链接。 – daljit 2012-03-20 12:22:05

2

IE 9绝对不支持访问反映HTML属性的DOM属性,这与过去15年中发布的所有主流浏览器都是一样的,所以我不确定你听说它不在哪里[编辑:Aaaah,我想你正在谈论自定义属性]。这些属性在DOM规范中已经标准化,因此可以保证在未来的浏览器中有效。此外,使用属性通常更方便和更兼容,而不是使用属性而不是使用getAttribute()setAttribute()(特别是在较旧的IE中,这已破坏了这些方法的实现)。

库如jQuery做有助于平抑了浏览器的问题和不兼容但实际上这些都不是几乎一样多或有问题,因为很多人认为,尤其是当你可以打折旧版本的IE。这些库的存在造就了流行的神话,即在没有它们的情况下,浏览器中的DOM操作是困难和有问题的。通常情况下,它不是,现在这些问题比以往更好地理解和记录。

+0

+1好的建议。 – RobG 2012-03-19 13:41:05

+0

感谢您的反馈,我确实同意库添加额外的图层并阻止开发人员了解底层语言。 – daljit 2012-03-20 12:20:20

+1

@daljit:如果开发允许使用一个库,以防止他们的理解如何JS和DOM的工作,这就是下到开发者,而不是图书馆。我对于其他人已经发现和解决的Safari来说,并不感兴趣,例如Safari。而且我* *得多,而使用比重新创建一个良好的库提供的实用功能(因为重建几乎没有人会想通过又一遍地输入了所有这些详细的东西)。我的两分钱。绝对确保你知道真正发生了什么,但不要让宝宝洗澡。 – 2012-03-20 13:25:52