代码之家  ›  专栏  ›  技术社区  ›  Alexey Romanov

跨浏览器脚本的“瘦”JavaScript框架?

  •  4
  • Alexey Romanov  · 技术社区  · 5 年前

    基本上我想要的东西,为JavaScript做什么 ie7.js html5shiv 不支持HTML5元素。或者Web套接字或画布的各种解决方法。

    我想jQuery和它的同类可以做到这一点,但是我更喜欢一些允许我编写的东西 正常的 ,标准兼容的JavaScript,就好像浏览器之间没有区别一样。

    如今,跨不同浏览器的JavaScript实现之间的差异与语言本身没有太大关系。除了旧浏览器中缺少的一些内置方法外,这些类型的行为也基本相同。但是仍然存在差异,特别是在目前的现状(Chrome/Firefox/Safari)和MSIE的遗留版本(即msie7)之间。最值得注意的是,DOM的API往往有一些或更多微妙的特性。

    我不想只需要一个框架,让我写JavaScript,在大多数浏览器的工作。那些是一角钱一打。我想要一个薄层,允许我写的代码,在现代浏览器和传统浏览器一样工作。jQuery、Dojo等都超越了这一点,提供了自己独特的api,而不是统一现有的api。

    说“使用jQuery”就像说我应该使用 Rich Ajax Platform (或其他代码生成框架)以避免跨浏览器呈现差异。我不想要一个“替代品”,我想要一个“错误修正”(不是字面意思)。

    8 回复  |  直到 13 年前
        1
  •  1
  •   luminarious    10 年前

    这个问题提出已经很久了,但也许对某些人有用:最近,一群来自英国《金融时报》的开发人员建立了一个通用的polyfill,只为不同的浏览器修补必要的部分。。 http://cdn.polyfill.io/v1/docs/

        2
  •  6
  •   Robusto    14 年前

    如果你的想法像你的帖子所说的那样简约,你可以尝试编译自己的微库,为一些最常见的恼人的分歧提供跨浏览器功能,比如addEventListener与attachEvent,getTagsByClassName与no method,滚动差异,窗口尺寸,大多数Javascript差异实际上是DOM方法中的差异,列表虽然很长,但不必一次编译完。添加您自己的跨浏览器功能,因为它们出现在您的编码。

        3
  •  5
  •   Justin Niessner    14 年前

    所有JavaScript库都试图通过允许您编写干净的跨浏览器兼容JavaScript代码来“公平竞争”。

    Prototype

    MooTools

    Scriptaculous

    jQuery

        4
  •  4
  •   Tim Down    14 年前

    你不可能完全达到你想要的。IE不公开DOM节点的原型,因此如果不为每个节点进行扩展,就无法扩展它们。另外,通常(可能总是?)不可能覆盖主机对象的现有只读属性,例如IE中的DOM节点,因此您将无法修复DOM节点本身上错误实现的DOM属性。即使只是修复DOM方法,每次获得新节点引用时仍需要调用函数来执行此操作:

    var el = someNode.nextSibling;
    fixUp(el); // Adds missing methods to the element and fixes broken ones
    var matchingEls = el.getElementsByClassName("someclass");
    

    http://perfectionkills.com/whats-wrong-with-extending-the-dom/

        5
  •  2
  •   Keith Bentrup    14 年前

    这就是说,重新发明轮子是没有价值的,所以明智的做法是将时间花在jQuery(可能使用定制的最小构建)等方面,同时确保禁用JavaScript的用户有合理的回退。

        6
  •  1
  •   Ryan Kinal    14 年前

    在编写“标准”JavaScript时,我倾向于定义自己的函数,这些函数提供常用特性的跨浏览器实现。 addEvent removeEvent (有几个实现)是这种技术的常见示例。我研究并编写了几个函数,这些函数使我能够针对特定问题调用一个函数,而不是每次都检测并执行正确的代码。

    像获取元素的高度、宽度和偏移量这样的事情需要针对不同的浏览器进行不同的实现,但是可以很容易地写入到函数中,并在需要的地方重用它们。

    加法器 , 移除事件 XMLHttpRequest 是个好的开始。在这里,我给你介绍一下:

    function createXHR()
    {
        var xhr;
        if (window.ActiveXObject)
        {
            try
            {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e)
            {
                alert(e.message);
                xhr = null;
            }
        }
        else
        {
            xhr = new XMLHttpRequest();
        }
    
        return xhr;
    }
    

    编辑: 请注意,从理论上讲,这种方法可能会对名称空间造成相当大的拥挤。你最好还是创建一个 utilities 对象,并调用 utilities.createXHR .

        7
  •  1
  •   luminarious    14 年前

    http://flowjs.com/ 应该很接近你要找的东西。它的主要目标是:“FlowJS在所有现代浏览器中实现domlevel3api”

        8
  •  0
  •   Achilles    14 年前