2012-02-16 59 views
8

我剛剛推出了一個HTML5遊戲應用程序,並且我不斷收到'對象不支持屬性或方法'getContext'錯誤日誌從我的一些用戶。HTMLCanvas'getContext'不是受支持的屬性或方法

我的設置僅允許使用Chrome(16 <),Firefox(9 <)或IE(9 <)的用戶玩遊戲。 IE(< 9)用戶在他們的臉上獲得了一個chromeframe安裝。

它只有一些我的IE9用戶拋出這個異常。 我已經玩過幾款裝有IE9的Windows機器上的遊戲,包括vista和windows 7.

搜索我的源代碼,對於函數調用getContext,我得到了相同的模式。 我使用document.createElement創建一個畫布元素,然後我調用getContext('2d'),下一行。

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

鑑於很多我的IE9用戶運行該遊戲,因爲它應該,我不認爲這是我的代碼有問題,而是一些工具欄/插件或IE9設置,在這裏我絆倒。

你們認爲什麼?

回答

3

據我所知IE9完全支持畫布標籤。但用戶應確保他不處於兼容模式。但只是爲了避免這個問題,我建議你使用excanvas。如果你不知道該怎麼下載excanvas並添加下面的鏈接

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

是的,但如果用戶在IE兼容模式9以下,他們應該得到一個Chrome Frame彈出窗口,並且不能在Chrome框架安裝前玩遊戲......無論如何,我已經把在我的頁面標題中,這樣可以防止用戶在IE怪癖模式下運行遊戲。我無意部署excanvas支持。我會回來,當我知道元標記是否改變了任何東西。 – Firecow 2012-02-16 08:00:32

0

你有沒有考慮的可能性,用戶不知道他們正在使用,並錯誤地報告它其中的IE瀏覽器版本?

+0

那是不可能的.. userAgent字符串,當異常被捕獲時自動發送。 – Firecow 2012-02-16 09:14:07

10

插入<meta http-equiv="X-UA-Compatible" content="chrome=1, IE=edge">後,我們已經減少了很多bug,但我們仍然有一些,但這可能是用戶使用奇怪的瀏覽器登錄的,chromeframe安裝檢查無法捕獲。

chrome = 1表示'使用chrome框架',如果存在的話。

IE =邊緣意味着'使用最高版本的IE'。

所以我現在就去。

+0

爲我工作,謝謝! – hevi 2012-06-21 12:38:49

+0

你做了什麼改變? @hevi – Illaya 2014-04-25 13:14:30

+0

根據聲明[here](http:// stackoverflow。com/questions/25557299/internet-explorer-11-disable-display-intranet-sites-in-compatibility-view-via),確保它是第一個元語句。 – B5A7 2017-02-16 05:03:25

0

Instructions

動態創建的元素 如果您已經創建了canvas元素動態不會有getContext方法添加到元素。爲了讓它工作,你需要在G_vmlCanvasManager對象上調用initElement。

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

我在G_vmlCanvasManager @Confa中收到錯誤 – Illaya 2014-04-25 13:24:20

相關問題