1

我想为即将到来的 Intranet 项目使用Boilerplatejs,但是,许多机器仍然是带有 IE8 的 WinXP(并且在组织中没有用于大规模 Firefox 或 Chrome 部署的选项)。

我很快尝试合并 html5shiv,但这似乎没有帮助。它似乎没有路由或其他功能正在工作。我试图弄清楚这是否值得做,或者其他人是否在花更多时间之前试图让这个工作正常进行。

4

3 回答 3

2

实际上,您将遇到的最困难的问题不是关于样板js,而是外部库。

具体的调整取决于您在应用程序中利用的功能,但首先您需要做的就是

  • 添加html5shim以支持 HTML5 元素,例如<section>
  • 包括json2库以缺少 json 序列化支持
  • [可选] 包括explorercanvas以启用浮动图表

把它放在你的<head>部分:

<!--[if lt IE 9]>
<script type="text/javascript" charset="utf-8" src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<script type="text/javascript" charset="utf-8" src="http://cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js"></script>
<script type="text/javascript" charset="utf-8" src="http://explorercanvas.googlecode.com/svn/trunk/excanvas.js"></script>
<![endif]-->

使用此代码段,您将可以使用带有路由、主题和 i18n 支持的样板js示例页面。

然后,您会注意到在Click Counter示例中,无论您单击按钮多少次,您都不会获胜。这是因为由于pubsub.js库中的错误(?), clickCounter/clickmeLOTTERY_ACTIVITY组件发布的事件没有到达任何侦听器(我什至前段时间提交了一个问题)。要解决它,请修补libs\pubsub\pubsub-20120708.js,更改

params = (args.length > 1) ? Array.prototype.splice.call(args, 1) : []

到 IE8 兼容的调用:

params = (args.length > 1) ? Array.prototype.splice.call(args, 1, args.length-1) : []

恭喜……你赢了!!!

我将解决Backbone TODO模块中剩余的问题留给您,您可以使用原始代码作为指导。

总而言之,我会说boilerplatejs完全兼容IE8,任何不兼容都来自支持库,而不是核心代码。

于 2013-02-14T09:48:15.030 回答
2

并不真地。这就是 h5bp 中的代码的内容

<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->

这些是 ie < 9 优雅降级的条件子句。

如果这是一个很多人会使用 ie<9 的项目,那么使用 xhtml 可能会更好......只是一个工程考虑

于 2013-02-01T20:08:10.183 回答
0

BoilerplateJS 核心没有设计任何 HTML5 功能。虽然我没有在 IE8 中测试过,但我相信通过一些调整这是很有可能的。例如,如果用于路由的库 crossroadsJS 与 IE8 不兼容,您仍然可以轻松地将其替换为 pathJS 或其他与 IE8 兼容的东西。

于 2013-02-02T04:22:46.327 回答