css - 在所有网络浏览器(包括谷歌浏览器)之间保持形式和功能一致的最佳技术是什么?

标签 css google-chrome portability

简短版本:在 Web 开发人员和 Web 开发人员的最终用户使用的所有浏览器中实现一致的呈现和 AJAX 功能的最简洁和最可维护的技术是什么?

  • IE 6、7、8
  • 火狐 2、3
  • Safari
  • 谷歌浏览器
  • 歌剧

长版:我写了一个web app aimed at other web developers .我希望我的应用在演示和 AJAX 行为方面都支持主要的网络浏览器(加上 Google Chrome)。

我从 Firefox/Firebug 开始,然后在 IE 6 和 7 下添加了一致样式的条件注释。接下来,令我惊讶的是,我发现 jQuery 在 IE 中的行为并不相同;所以我changed my Javascript to be portable on FF and IE使用条件语句和不太纯的 jQuery。

今天开始在Webkit和Google Chrome上测试,发现不仅FF和IE的样式不一致,而且Javascript根本不执行,可能是语法或解析错误。我期待一些 CSS 工作,但现在我有更多的 Javascript 调试要做!在这一点上,我想退后一步思考,然后再为所有情况编写成堆的特例。

不是在寻找 Elixir ,只是在寻找最佳实践,以使事情尽可能易于理解和维护。我更喜欢这是否适用于没有服务器端智能的情况;但是,如果有优势,例如,检查用户代理,然后将不同的文件返回给不同的浏览器,那么如果 Web 应用程序的总体可理解性和可维护性较低,那也没关系。非常感谢大家!

最佳答案

我处于类似情况,正在开发一个面向 IT 专业人员的 Web 应用程序,并且需要支持同一套浏览器,但不包括 Opera。

到目前为止我学到的一些一般性的东西:

  • 经常在尽可能多的目标浏览器中进行测试。确保您在开发计划中有时间这样做。
  • 工具包可以让您部分获得跨浏览器支持,但最终会在某些浏览器上遗漏一些东西。计划一些时间来调试和研究针对特定浏览器的修复。
  • 如果您需要工具包中没有的东西并且找不到免费的代码片段,请花一些时间编写实用函数来封装依赖于浏览器的行为。
  • 了解已知的浏览器错误,以便围绕这些错误引导您的实现。

我学到的一些更具体的东西:

  • 仅在万不得已时才使用基于用户代理的条件代码,因为不同代的“相同”浏览器可能具有不同的功能。相反,首先测试符合标准的行为——例如,if(node.addEventListener)...,然后是常见的非标准函数——例如,if(window.attachEvent)... ,然后,如果必须的话,查看用户代理以了解特定的浏览器类型和版本号。
  • 几乎每个浏览器都知道 DOM 何时“准备好”以供脚本访问。一个好的工具包会为您抽象这一点。
  • 几乎每个浏览器的事件处理程序都不同。一个好的工具包会为您抽象这一点。
  • 创建 DOM 元素,尤其是表单控件或具有属性的元素,使用 document.createElement 和 element.setAttribute 可能会很棘手。虽然不是标准的(而且有点讨厌),但使用 node.innerHTML 和包含 HTML 位的字符串似乎在各种浏览器类型中更可靠。我还没有找到可以让您使用 element.setAttribute 将“名称”添加到 IE 中的表单元素的工具包。
  • CSS 差异(和错误)与 JS 差异一样重要。
  • “核心”Javascript 功能(字符串、日期、正则表达式、数组函数)似乎在浏览器中非常可靠和一致,尤其是与 DOM/CSS/Window 函数相关。事实上,每个平台上的语言并不完全不同,这有点令人高兴。 :-)

我还没有真正遇到任何特定于 Chrome 的 JS 错误,但它始终是我测试的首批浏览器之一。

HTH

关于css - 在所有网络浏览器(包括谷歌浏览器)之间保持形式和功能一致的最佳技术是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45239/

相关文章:

c++ - isnan 在 std::namespace 中吗?更一般地说,什么时候 std::是必要的、可选的或要避免的?

c - 是否有必要包含 <stdint.h> 以保证 C99 新类型的可移植性?

css - FireFox 中的行内 block 重叠边界而不是溢出

javascript - onPaste e.preventDefault 在 Chrome 上失败

jquery - CSS3/Jquery 文本向上滑动动画缺少额外的帧

javascript - 使用 DELETE 获取 api 问题 - 即使 cors 良好,也会更改 OPTIONS

google-chrome - 如何更改/自定义 Chrome 开发者工具的键盘快捷键?

python - 是否有一种可移植的方式来获取 Python 中的当前用户名?

html - 我怎样才能使我的马赛克中的图片成为各自 div 的 100%?

javascript - 将 JSON 加载到 div 中并同时单击按钮更改背景颜色