2012-04-18 35 views
5

Tôi đang cố gắng sử dụng Flot trong dự án Bootstrap. Tôi thấy rằng trong IE8, đồ thị Flot là vô hình, và tôi đã thu hẹp vấn đề xuống HTML5 shim được sử dụng bởi Bootstrap.Sử dụng Flot với Bootstrap: IE8 không tương thích?

Đây là trang đầy đủ: đó là basic Flot example cộng với HTML5 shim và biểu đồ không hiển thị trong IE8 (nó tốt trong Chrome).

Nếu tôi xóa dòng chuyển HTML5, biểu đồ sẽ ổn trong IE8. Tuy nhiên, tôi cần HTML5 shim cho các kiểu Bootstrap để làm việc (khi tôi thêm Bootstrap trở lại - Tôi đã loại bỏ các tham chiếu đến nó cho các mục đích của ví dụ này) - nếu nó không có thì các kiểu Bootstrap sẽ bị lỗi.

Tôi có thể làm gì?

<!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> 
+0

Đồ thị xuất hiện ok cho tôi trong IE7 và 8, mặc dù tôi không biết shim nào được đưa vào bootstrap. Bạn có thể đăng một bản demo với shim và bootstrap để xem không? –

Trả lời

7

html5shim và và excanvas phần nào cũng làm điều tương tự tôi đoán? excanvas mô phỏng các yếu tố canvas html5 và html5shim thực hiện một số phép thuật khác mà tôi không quá rõ ràng. Trong ngắn hạn, bạn sẽ muốn nói html5shim để loại bỏ nó khi nói đến IE < 9 và các yếu tố canvas. Tôi đào xung quanh trong source một chút và tìm thấy thông tin này.

Đối tượng html5 được phơi sáng sao cho có thể phát hiện nhiều yếu tố hơn và phát hiện có thể phát hiện có thể phát hiện có thể phát hiện có thể xảy ra hiện tượng rung động trên khung nội tuyến.
tùy chọn có thể thay đổi trước khi tập lệnh là bao gồm html5 = {'elements': 'mark section', 'shivCSS': false, 'shivMethods': false};

Không lâu sau đó nó liệt kê tất cả các yếu tố đó sẽ là "Shiv" d, vì vậy tôi đã đưa ra với điều này như một giải pháp:

<!--[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]--> 

Danh sách khổng lồ trong các yếu tố tôi đã ra khỏi nguồn như tốt, chỉ xóa canvas.

Ngoài ra, tôi đã sử dụng tất cả các ví dụ của bạn và dường như nó hoạt động tốt.

+0

Điều đó hoàn toàn tuyệt vời, cảm ơn bạn! – Richard

+0

Cảm ơn Richard & Ryley ... Tôi đã gặp vấn đề tương tự và điều này đã giúp tôi tiết kiệm rất nhiều thời gian gỡ lỗi mà tôi nghi ngờ! – randlet

+0

Bạn xứng đáng có một bia cho câu trả lời này, bạn kết thúc một ngày gỡ lỗi điên :) –

1

Tôi cũng gặp sự cố với bootstrap và flot ở ie8, nhưng không thể xác định hoàn toàn với câu hỏi của OP. Mặc dù những gì giải quyết vấn đề đối với tôi cũng giống như câu trả lời của Ryley, tôi mất một giờ để hiểu những gì tôi cần làm để làm cho nó hoạt động.

Giải pháp đơn giản:

  1. Download excanvas.js (Nếu nó không có trong gói flot của bạn.)
  2. Thêm conditional comment trước khi tôi tải tất cả các file javascript khác trong thẻ head: <!--[if IE 8]> <script src="@Url.Content("~/Scripts/canvas/excanvas.min.js")" type="text/javascript"></script> <[endif]-->

Khá đơn giản, nhưng: Tôi đã theo dõi bản nhạc này bằng cách gỡ lỗi javascript trong IE, với lỗi "bẻ khóa" được kích hoạt. Điều đó đã cho tôi thông báo lỗi sau: 'window.G_vmlCanvasManager' is null or not an object. Googling dẫn tôi đến excanvas.js. Và pronto, flot.js đột nhiên hoạt động. Tôi không biết liệu điều này có liên quan gì đến HTML5shim hay không, nhưng nó hoạt động ... và đơn giản hơn câu trả lời mà Ryley đề xuất.

Các vấn đề liên quan