2012-02-16 47 views
8

Tôi vừa mới công bố ứng dụng trò chơi HTML5 và tôi tiếp tục nhận được đối tượng 'không hỗ trợ thuộc tính hoặc phương pháp' getContext 'nhật ký lỗi từ một số người dùng của tôi.HTMLCanvas 'getContext' không phải là thuộc tính hoặc phương thức được hỗ trợ

Thiết lập của tôi chỉ cho phép người dùng có Chrome (16 <), Firefox (9 <) hoặc IE (9 <) để chơi trò chơi. IE (< 9) người dùng nhận cài đặt chromeframe trên khuôn mặt của họ.

Chỉ một số người dùng IE9 của tôi ném ngoại lệ này. Tôi đã chơi trò chơi trên một số cửa sổ máy với IE9, cả vista và windows 7.

Tìm kiếm nguồn của tôi, cho hàm getContext, tôi nhận được cùng một mẫu. Tôi tạo một phần tử canvas bằng cách sử dụng document.createElement, và sau đó tôi gọi getContext ('2d'), dòng tiếp theo.

var buffer = /** @type {!HTMLCanvasElement} */ (document.createElement('canvas')), 
    ctx = /** @type {!CanvasRenderingContext2D} */ (buffer.getContext('2d')), 
    draw = function(ctx) { 
     /** 
     * Alot of drawing calls. 
     */ 
    }; 
draw(ctx); 

Cho rằng rất nhiều người dùng IE9 tôi chạy các trò chơi như nó phải, tôi không nghĩ rằng đây là một vấn đề với mã của tôi, mà đúng hơn là một số thanh công cụ/plugin hoặc thiết lập trong IE9 được vấp ngã tôi ở đây .

Các bạn nghĩ sao?

Trả lời

3

theo như tôi biết IE9 hỗ trợ đầy đủ thẻ canvas. Nhưng người dùng nên đảm bảo rằng anh ta không ở chế độ tương thích. Nhưng chỉ để tránh vấn đề tôi đề nghị bạn sử dụng excanvas. Nếu bạn không biết cách tải xuống excanvas và thêm liên kết sau

<!--[if lt IE 9]><script src="../excanvas/excanvas.original.js"></script><![endif]--> 
+0

Vâng, nhưng nếu người dùng ở chế độ tương thích IE dưới 9, họ sẽ nhận được cửa sổ bật lên Chrome Frame và không thể chơi trò chơi trước khi cài đặt khung chrome ... http-equiv = "Nội dung tương thích X-UA" = "IE = 9"> trong tiêu đề trang của tôi, do đó sẽ giữ cho người dùng không thể chạy trò chơi ở chế độ quirks của IE. Tôi không có ý định triển khai hỗ trợ excanvas. Tôi sẽ quay trở lại, khi tôi biết nếu thẻ meta đã thay đổi bất cứ điều gì. – Firecow

0

Bạn có cho rằng khả năng người dùng không biết họ đang sử dụng phiên bản IE nào và báo cáo không chính xác?

+0

Thats không thể .. chuỗi userAgent, được gửi tự động, khi ngoại lệ bị bắt. – Firecow

10

Sau khi chèn <meta http-equiv="X-UA-Compatible" content="chrome=1, IE=edge"> chúng tôi đã giảm số lượng lỗi rất nhiều, chúng tôi vẫn có một vài, nhưng đó có thể là người dùng đăng nhập bằng các trình duyệt lạ mà kiểm tra cài đặt chromeframe không bắt được.

chrome = 1 nghĩa là 'sử dụng khung chrome' nếu ở đó.

IE = cạnh có nghĩa là 'sử dụng phiên bản IE cao nhất có thể'.

Vì vậy, tôi sẽ đi với điều đó ngay bây giờ.

+0

đã làm việc cho tôi cảm ơn! – hevi

+0

Bạn đã thực hiện những thay đổi nào? @hevi – Illaya

+0

Theo tuyên bố [ở đây] (http: // stackoverflow.com/questions/25557299/internet-explorer-11-disable-display-intranet-sites-in-khả năng tương thích-xem-qua), hãy chắc chắn đó là câu lệnh meta đầu tiên. – B5A7

0

Từ Instructions

yếu tố động tạo Nếu bạn đã tạo ra yếu tố canvas của bạn tự động nó sẽ không có phương pháp getContext thêm vào nguyên tố này. Để làm cho nó hoạt động, bạn cần gọi initElement trên đối tượng G_vmlCanvasManager.

var el = document.createElement('canvas'); 
G_vmlCanvasManager.initElement(el); 
var ctx = el.getContext('2d'); 
+0

Tôi gặp lỗi trong G_vmlCanvasManager @Confa – Illaya

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