将 Flot 与 Bootstrap 一起使用:IE8 不兼容?
Posted
技术标签:
【中文标题】将 Flot 与 Bootstrap 一起使用:IE8 不兼容?【英文标题】:Using Flot with Bootstrap: IE8 incompatibility? 【发布时间】:2012-04-29 18:52:04 【问题描述】:我正在尝试在 Bootstrap 项目中使用 Flot。我发现在 IE8 中,Flot 图是不可见的,我已将问题缩小到 Bootstrap 使用的html5 shim。
这是完整的页面:它是basic Flot example 加上 HTML5 shim,并且图表在 IE8 中是不可见的(在 Chrome 中很好)。
如果我删除 HTML5 填充线,则该图在 IE8 中很好。但是,我需要 HTML5 shim 才能使 Bootstrap 样式正常工作(当我重新添加 Bootstrap 时——出于本示例的目的,我已经删除了对它的引用)——如果它不存在,那么 Bootstrap 样式就会变得混乱。
我能做什么?
<!DOCTYPE html><html lang="en">
<head>
<meta charset="utf-8">
<title>Flot Examples</title>
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="/scripts/plugins/excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="/scripts/jquery-1.7.1.min.js"></script>
<script language="javascript" type="text/javascript" src="/scripts/plugins/jquery.flot.js"></script>
</head>
<body>
<div id="placeholder" style="width:100%;height:300px;"></div>
<script type="text/javascript">
$(function ()
var d1 = [];
for (var i = 0; i < 14; i += 0.5)
d1.push([i, Math.sin(i)]);
var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]];
var d3 = [[0, 12], [7, 12], null, [7, 2.5], [12, 2.5]];
$.plot($("#placeholder"), [ d1, d2, d3 ]);
);
</script>
</body>
</html>
【问题讨论】:
该图在 IE7 和 8 中对我来说正常,但我不知道引导程序中包含哪个 shim。你能发布一个包含 shim 和 bootstrap 的演示来看看吗? 【参考方案1】:html5shim 和 excanvas 在某种程度上做同样的事情我猜? excanvas 模拟 html5 画布元素,而 html5shim 还做了一些我不太清楚的其他魔法。简而言之,当涉及到 IEsource 里翻了一下,发现了这个信息。
html5
对象被暴露,这样更多的元素可以被 shived 和 可以在 iframe 上检测到现有的 shiving。 可以在脚本之前更改选项 包括 html5 = '元素':'标记部分','shivCSS':假, 'shivMethods': 假 ;
在它列出所有将被“shiv”d 的元素后不久,我想出了一个解决方案:
<!--[if lt IE 9]>
<script type="text/javascript">
var html5 = 'elements': 'abbr article aside audio bdi data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video' ;
</script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
我也从源代码中取出了巨大的元素列表,只删除了canvas
。
除此之外,我使用了您的所有示例,并且它似乎工作正常。
【讨论】:
感谢 Richard 和 Ryley...我遇到了同样的问题,这为我节省了很多调试时间! 你应该为这个答案喝一杯,你完成了一天的疯狂调试:)【参考方案2】:我在 ie8 中也遇到了 bootstrap 和 flot 的问题,但不能完全认同 OP 的问题。尽管为我解决问题的方法与 Ryley 的答案大致相同,但我还是花了一个小时才明白我需要做些什么才能让它发挥作用。
简单的解决方案:
-
Download excanvas.js(如果它不在您的 flot 包中。)
在我加载所有其他 javascript 文件之前添加 conditional comment 头标签:
<!--[if IE 8]>
<script src="@Url.Content("~/Scripts/canvas/excanvas.min.js")" type="text/javascript"></script>
<[endif]-->
很简单,但是:我通过在 IE 中调试 javascript 进入了这条轨道,并激活了“错误中断”。这让我收到以下错误消息:'window.G_vmlCanvasManager' is null or not an object
。谷歌搜索将我引向 excanvas.js。很快,flot.js 突然起作用了。我不知道这是否与 HTML5shim 有任何关系,但它有效......并且比 Ryley 提出的答案更简单。
【讨论】:
以上是关于将 Flot 与 Bootstrap 一起使用:IE8 不兼容?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Bootstrap 5 与 Next.js 一起使用?