是否可以编写一个JavaScript库,使所有浏览器都符合标准?

是否可以编写一个JavaScript库,使所有浏览器都符合标准?,javascript,css,dom,standards,Javascript,Css,Dom,Standards,我不是JavaScript高手,但有可能创建一个可嵌入的JavaScript文件,使所有浏览器都符合标准吗?就像所有已知JavaScript黑客的集合一样,迫使每个浏览器正确解释代码 例如,IE6不能识别CSS中除了链接以外的任何东西的:hover伪类,但存在一个JavaScript文件,该文件可以查找所有对:hover的引用,并应用一种黑客攻击,迫使IE6正确地执行该操作,从而允许我使用hover命令 每个站长都要花费大量的时间(以及金钱)来学习所有这些黑客。想象一下,如果有一个开源项目,用户

我不是JavaScript高手,但有可能创建一个可嵌入的JavaScript文件,使所有浏览器都符合标准吗?就像所有已知JavaScript黑客的集合一样,迫使每个浏览器正确解释代码

例如,IE6不能识别CSS中除了链接以外的任何东西的
:hover
伪类,但存在一个JavaScript文件,该文件可以查找所有对
:hover
的引用,并应用一种黑客攻击,迫使IE6正确地执行该操作,从而允许我使用hover命令

每个站长都要花费大量的时间(以及金钱)来学习所有这些黑客。想象一下,如果有一个开源项目,用户只需在嵌入代码的标题中添加一行代码,然后就可以按照公认的web标准(XHTML Strict,CSS3)自由地编写站点代码

此外,这将促使web浏览器遵循标准,或者由于执行所有JavaScript代码而不得不使用较慢的浏览器

那么,这可能吗?

检查一下它在标准化浏览器javascript方面做得很好


同样,IE浏览器也支持HTML5画布标签。

你不能完全遵守标准,但你可以使用一个框架来解决一些最严重的违规问题。你也可以使用一种叫做a的东西。

实际上你可以,有很多库来处理这个问题。从一开始,javascript遵从性问题就一直是开发人员的问题,感谢开发库的创新人员克服了这个问题


其中之一,也是我最喜欢的是JQuery。

IE有一个库,使它更像一个符合标准的浏览器:

就像所有已知的 javascript黑客强制每个 使用浏览器正确解释代码

您有两种选择:阅读并了解浏览器的每个异常,然后自己创建一个,或者使用可用的库

如果需要javascript更正抽象,可以使用jQuery

如果您想要css校正抽象,可以检查

我通常不喜欢使用javascript所做的css更正。这是我的代码的另一个复杂性,另一个库可以将bug插入到已经有bug的浏览器中。与ie6、ie7等相比,我更喜欢创建,并为它们各自创建单独的样式表。这种方法有效,不会产生很多开销

编辑:(我知道我们在其他浏览器中也有问题,但由于IE是主要的浏览器,通常我们需要非常奇怪的技巧才能工作,css条件语句是一个很好的方法)

此外,这将促使web浏览器遵循标准,或者由于执行所有JavaScript代码而不得不使用较慢的浏览器

嗯。。。这就是问题所在。并不是所有的不兼容都可以用JS技巧消除,其他的会变得太慢而无法使用,或者保留一些微妙的不兼容。一个典型的例子是IE6上的许多脚本伪造了对PNG文件半透明性的支持:它们适用于简单的情况,但对于创造性和广泛使用此类图像的页面,它们会崩溃或变得非常缓慢

没有免费的午餐

其他人则指出了可以使用脚本或库来执行的特定情况。我的建议是逐步解决这个问题:为一个像样的浏览器编写代码,将自己尽可能地限制在关键功能的公共支持功能集上。然后引入黑客来修补失败的浏览器,允许自己在可能的情况下在较旧/较小的浏览器上放弃功能或优雅地降级


不要期望它太容易。如果是这么简单,你就不会为此得到报酬了…;-)

在JavaScript 1.4之前,没有全局参数数组,如果没有高级源过滤器,您自己也不可能实现参数数组。这意味着该语言不可能保持与Netscape 4.0和Internet Explorer 4.0的向后兼容性。所以我可以直接说,,你不能让所有的浏览器标准都兼容

在netscape之后,您可以用JavaScript本身实现该语言核心中的几乎所有功能。例如,我用100%的JavaScript代码对数组对象的所有方法进行了编码

如果转到链接,然后转到数组,再转到“源”,您可以在这里看到我的数组实现


你们大多数人可能指的是自己实现DOM对象,这是一个更大的问题。使用VML,您可以在所有现代浏览器中实现画布标记,但是,在Internet Explorer中,您将获得错误/勉强工作的性能,因为VML是标记,它不是实现画布标记的好格式

Flash/Silverlight:使用这两种方法中的任何一种,您都可以实现Canvas标记,它将非常好地工作,您还可以实现声音。但是,如果用户没有任何浏览器插件,您就无能为力

DOM抽象:在DOM问题上,您可以通过实现自己的事件对象(如QEvent)来抽象DOM,甚至可以实现自己的节点对象(如YAHOO.util.Element),但是,这些通常对标准API有一些细微的更改,因此,人们通常只是从标准中抽象出来,而有数百种情况下的库是抽象出来的

这可能是你问题的最佳答案。它使浏览器尽可能符合标准


我认为IE6的JS太大,无法嵌入到网站中。看看IE7 JS wa