【问题标题】:Wanted: Minimal cross-browser Javascript library需要:最小的跨浏览器 Javascript 库
【发布时间】:2011-08-02 23:27:43
【问题描述】:

我知道一些 Javascript,但刚刚意识到我对跨浏览器问题知之甚少。 IE 中事件回调中的 this 对象(如 xhr.onreadystatechange = function () { ... })中的一些讨厌的小东西不是指应用函数的对象,而是指 window,这并不完全有用。

an impressive and comprehensive-looking list of differences here on SO

是否还有一个库可以涵盖这些令人讨厌的跨浏览器问题,而不会向您出售完整的生活方式以及带有幻灯片效果的圆角?我知道 jQuery 很棒(而且模块化,我知道,UI 是额外的;我敢打赌其他人也很棒),但我正在寻找更精简、更接近根源的东西。只做最低限度并消除肮脏。不必将 DOM 包装在糖中。

更新

感谢大家的建议。我将看一下 MyLib、microJS、Ender 和 Sizzle。 GWT 虽然肯定是跨浏览器,但我认为不是一种轻量级的方法,但绝对是一种有趣的方法。

【问题讨论】:

  • 您最想要的是一个高度支持和文档化的库,因为如果没有其中任何一个,您将无法使用它,并且它的实用性会随着时间的推移而消失。 IMO,这将把你引向市场领导者,如 jQuery、YUI3 和其他一些,即使它们可能提供比你认为需要的更多的东西。使用从流行 CDN 加载的流行库也有缓存原因,这将有助于更快地加载页面。
  • @Lumi 你能详细说明为什么 jQuery 对你来说不够接近根源吗?它看起来离我很近......
  • @SimeVidas jQuery 是一个臃肿的大型库。你只使用了其中的 20%。
  • @Raynos 但是由于依赖关系是线性的,你不能进入 github 并通过只包含模块 X 的代码来从本质上减少负担吗?
  • @摩西没有。 jQuery 不是模块化的。这一切,咝咝作响或什么都没有

标签: javascript cross-browser


【解决方案1】:

jQuery 不是模块化的——要么全有,要么全无。如果您想要一个可靠的跨浏览器库,并且可以将其修剪到所需的最低限度,那么很难超越 MyLibrary: http://www.cinsoft.net/mylib.html

“MyLibrary”这个名称意味着当您下载和自定义它时,它会成为您的库。

它绝对可靠、快速且非常模块化。您可以只使用您想要的部分并删除任何不必要的部分。

顺便说一句,像 jQuery 这样的许多库并不是真正的“跨浏览器”,它们是多浏览器的——它们支持的浏览器数量有限,并且不太关心其余的浏览器。另一方面,MyLibrary 被编写为真正的跨浏览器。它还提供了出色的特征检测快捷方式,因此您可以轻松编写具有回退功能的健壮代码。

【讨论】:

  • “真正跨浏览器”感觉像是浪费。谁在乎 NN4 错误
  • 谢谢,@RobG。你输入的字符比其他人多,所以我接受了你的答案。 :-) 说真的,我意识到我的问题引发了一些我需要进一步研究的建议。感谢大家分享您的经验。
  • @Raynos — 处理旧浏览器中的错误是确保代码健壮性的绝佳方法。你无法预测未来的错误,但如果你已经处理了所有旧的错误,你就可以更有信心地迎接未来。
  • @RobG ...因此,在真正晦涩难懂、陈旧和破败的行为中进行修改实际上增加了未来的证明能力?我对此表示怀疑,高度怀疑。多浏览器库没有错。
  • So hacking around really obscure, old and broken behaviour actually increases future proof-ness? 是的,不是因为“黑客”,而是因为代码经过彻底测试并且通常提供高度兼容的后备。多浏览器库的问题在于,它们需要不断更新新浏览器,并且随机决定放弃对旧浏览器的支持。
【解决方案2】:

你想要什么?

只需检查microJS 并下载所需的库。

如前所述,您可以使用Ender 来捆绑它们

【讨论】:

    【解决方案3】:

    “最小的跨浏览器 Javascript 库”+“我正在寻找更精简、更接近根源的东西”

    我立刻想到了MyLib
    您甚至可以使用this online tool 构建您自己的自定义版本。

    【讨论】:

      【解决方案4】:

      我认为你应该看看Ender Dustian DiazJacob ThorntonTwitter 工作。

      Ender 不是传统意义上的 JavaScript 库。所以不要 冲出去尝试用 Ender 替换 jQuery 或 MooTools ......它只是 不会工作....但是!您可以从 Ender 构建一个库。 你应该。现在。

      这是因为:Ender 是一个开放的、强大的、从微观到宏观的 API,用于 编写您自己的自定义 JavaScript 库;它结束了应用程序 将不可知的、独立的模块转换为光滑、直观和熟悉的 界面,所以你不必。

      【讨论】:

        【解决方案5】:

        this 在 JavaScript 中的问题在于,对于不习惯它总是获取上下文值的人来说,它可能会有点混乱,或者换句话说,它总是指向位于执行代码的当前上下文。

        在某些事件、间隔等情况下,this 指向窗口是绝对正常的,因为 JavaScript 中的很多(可能太多)属性都附加到窗口对象。

        至于在你的工作中使用哪个 JS 库...好吧,如果你不想将 jQuery 作为一个整体使用,那么它最重要的部分总是处理 DOM 中的对象选择,这非常重要跨浏览器兼容性。

        它叫做 Sizzle,可以在 here 找到。它不像 jQuery 那样提供花哨的东西,但它很小,并且提供了一种很棒的跨浏览器方式来选择页面上的东西。

        【讨论】:

        • this 上的 cmets 不正确且具有误导性。它不是“上下文”。让 javascript 新手感到困惑的是,它是由函数的调用方式设置的(并且可以设置为调用者想要的任何值),而不是函数的声明或初始化。所以它的价值可能不是那些不知道它是如何工作的人所期望的。
        • @RobG 我不知道你对“上下文”这个词的理解,但我很确定你在 JavaScript 中找到的每一本书都提到了当前执行代码的状态语境。通过函数调用、闭包等方式进行上下文更改是完全不同的事情。
        • ECMA-262 中描述了一个执行上下文,它包括很多东西,包括作用域链、执行/变量对象、变量和参数等等。该上下文中的一项是 this 关键字,它本质上是一个保留的局部变量。说它代表上下文是一种误导,它是一个更大概念的组成部分。它的值不会告诉你函数、它的上下文,甚至它是如何被调用的。
        • @RobG 你要不要再读一遍我的帖子(这次是彻底)并告诉我我在哪里远程说过 this 指向任何事物的“上下文”?我说"it will always point **to the object** which is **in the current context** of the executing code"。如果这听起来与抱歉相比不够不同,我就不能说得更清楚了。
        • @holodoc,@RobG,这不是 this 本身让我感到困惑。我知道那些东西。还有apply() 提供的 JS funkiness。令我困惑的是,鉴于 xhr.onreadystatechange = function () { ... },与 FF 不同,它的行为符合预期,IE 不会将处理程序应用于xhr,而是应用于window。我想你可以明白为什么它不是预期的。这是你希望图书馆平衡的东西。
        【解决方案6】:

        您可以查看 GWT.. 但它也向您推销了一种生活方式 - Java 开发环境。但这也带来了调试器、合适的 IDE、更简单的 OO,它可以编译为优化的跨浏览器 javascript 等。而且您始终可以在您认为合适的地方混合和匹配原生 JavaScript。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-11
          相关资源
          最近更新 更多