草庐IT

javascript - 如何正确使用 HTML5shiv...如何在 IE 9、Firefox、Safari 上工作?

coder 2023-07-31 原文

Question

How does html5shiv work on IE9 when the conditional comment used [if lt IE 9] is for IE8 and below AND do Safari 4.x and Firefox 3.x read IE conditional comments? If not how could html5shiv POSSIBLY work on these browsers using the conditional comments as suggested in their Github Instructions?


有一个question here询问它是否可以在没有条件注释的情况下在所有浏览器中使用以及副作用是什么,但这不是我的问题。这个问题是4年前问的。 HTML5 现在是标准,微软不再提供对旧版浏览器的支持,所以在每个浏览器中加载它在这一点上是疯狂的,我不会考虑。我的问题与 Github 上的文档有关,html5shiv 使用该文档开箱即用,以及今天如何使用它来支持它声称支持的浏览器。

引用 Github 上关于 html5shiv 脚本的自述文件:

“它还为 IE6-9、Safari 4.x 和 FF 3.x 应用了 HTML5 元素的基本样式。”

用法:

<!--[if lt IE 9]>
    <script src="bower_components/html5shiv/dist/html5shiv.js"></script>
<![endif]-->

根据 Stat Counter,在过去的一年里,IE 8 和 9 的全局使用率从 4% 左右下降到 2% 左右。 .由于微软dropped support对于 1 月 12 日的旧版浏览器,html5shiv 似乎现在或很快就会成为过去。看看这些旧版 IE 浏览器在未来一年会下降多少将会很有趣。

但是,根据您正在开发的内容,您可能仍希望支持这些浏览器。当您在上述统计中包括 Safari 4.x 和 Firefox 3 时,html5shiv 支持的浏览器总份额为 2.3%。对于大多数人来说,这不算什么,但如果您拥有一个电子商务网站,2.3% 可能是巨大的。


关于我的实际问题,我想我要么忽略了文档中的某些内容,要么对 IE 条件注释理解得不够透彻。

从逻辑上讲,我认为这是最好的方法。 IE 中的条件注释适用于版本 5 到 9,因此我们不应该无缘无故地在 IE5 中加载脚本。

<!--[if !(IE 5)]>
    <script src="bower_components/html5shiv/dist/html5shiv.js"></script>
<![endif]-->

但是,在过去的 5 年里,我从未真正看到有人这样做,所以我显然遗漏了一些东西。另外,我仍然不明白这对 FF 3 和 Safari 4 有何影响,除非有错误或其他原因导致他们不阅读评论。我打开了这个 topic on html5shiv github regarding this issue as well ,但一直未能得到答复。

HTML5shiv 很容易在数以百万计的网站上使用,大多数开发人员和网站所有者都认为它支持开箱即用的 IE9 Safari 4 和 FF 3。


Also, as far as I'm aware in regards to IE9, this is all that html5shiv does to support it.

article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
mark{background:#FF0;color:#000}

如果这是真的,这可能是许多人停止使用它的另一个原因考虑当你把它从等式中取出并将它包含在你的 css(或 css 重置)中时,你下降到 1.39% html5shiv 实际上会影响的浏览器。

最佳答案

旁注:您应该只将这样的浏览器统计数据作为非常宽松的指南。此类网站上的统计数据远非福音,并且会因国家/地区、市场与市场、人口统计数据而异。您应该查看您自己网站的分析,看看有多少用户属于 Safari 4、FireFox 3、Internet Explorer 6-8 类别(我的猜测是它会少于 2.3%)。

(还请记住,FireFox 会自动更新自身,目前版本为 43(!),而 Safari 会随 OSX 自动更新,并且版本为 9。人们仍在使用旧版本的可能性非常小。我检查过我的一个非常受欢迎的分析网站:在过去一个月的 20,000 个 session 中,只有 1 个使用 FF3,1 个使用 IE7,1 个使用 IE8,没有一个使用 Safari 4 或 IE6。)


但是,如果您热衷于定位那些异常值,以下是您问题的答案:

How does html5shiv work on IE9 when the conditional comment used [if lt IE 9] is for IE8 and below

HTML5shiv 不适用于 IE9,因为它不需要。 Internet Explorer 9 已经正确支持几乎所有的 HTML5 元素:

do Safari 4.x and Firefox 3.x read IE conditional comments?

Safari 和 FireFox 不支持 IE 条件注释,但它们可以像这样被定位:

最终幻想3:

/* FireFox 3 */
html>/**/body .selector, x:-moz-any-link, x:default { color: lime; }

Safari :

/* Safari only override */     
::i-block-chrome,.myClass {      color: lime;     }

但这不是 HTML5shiv 所做的,你是对的:HTML5shiv 主页上显示的条件语句不会被 FF3 或 Safari 4 在其当前版本中选取状态。我猜这是因为他们认为这些浏览器非常稀有,对于普通用户来说不值得。此外,任何 CSS 重置/规范化都可能包含这些浏览器所需的 CSS。

因此,了解如何在所有提到的浏览器中处理 HTML5 元素:

IE6-8:按照 Github documentation 中的说明使用 HTML5shiv.js .

IE9-11:使用Normalize.css或将 main { display: block } 添加到您的 HTML 中。 (感谢 LGSon。)

Safari 4:使用 Normalize.css 或以下 CSS:

article, aside, details, figcaption, figure, main,
footer, header, hgroup, menu, nav, section {
    display: block;
}

FireFox 3:同上。

(FireFox 4+ 和 Safari 5+ 有更强的 HTML5 支持,不需要上面的 CSS。)

关于javascript - 如何正确使用 HTML5shiv...如何在 IE 9、Firefox、Safari 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34734100/

有关javascript - 如何正确使用 HTML5shiv...如何在 IE 9、Firefox、Safari 上工作?的更多相关文章

  1. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  2. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  3. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  4. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  5. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  6. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  7. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  8. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

    我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

  9. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  10. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

随机推荐