Tarayıcılarda tuval desteğini tespit etmenin iki popüler yöntemi vardır:
Matt'in varlığını kontrol etme önerisigetContext
, Modernizr kütüphanesi tarafından da benzer şekilde kullanılır:
var canvasSupported = !!document.createElement("canvas").getContext;
WebIDL ve HTML spesifikasyonları HTMLCanvasElement
tarafından tanımlanan arayüzün varlığını kontrol etme . Bu yaklaşım IE 9 ekibinin bir blog yazısında da önerildi .
var canvasSupported = !!window.HTMLCanvasElement;
Benim tavsiyem, birkaç nedenden dolayı ikincisinin bir çeşididir ( Ek Notlara bakın ):
- IE 9 dahil olmak üzere kanvas destekleyen her bilinen tarayıcı bu arayüzü uygular;
- Kodun ne yaptığına dair daha özlü ve anında açıktır;
getContext
Yaklaşımdır önemli ölçüde yavaş tüm tarayıcılarda bir HTML elemanı oluşturma içerir çünkü. Mümkün olduğunca fazla performans sıkıştırmanız gerektiğinde bu ideal değildir (örneğin Modernizr gibi bir kütüphanede).
İlk yöntemi kullanmanın belirgin bir faydası yoktur. Her iki yaklaşım da taklit edilebilir, ancak bunun kazara olması muhtemel değildir.
ek Notlar
Yine de bir 2D içeriğin alınabildiğini kontrol etmek gerekebilir. Habere göre, bazı mobil tarayıcılar çeklerin üzerindeki her ikisi için return true, ancak dönebilir null
için .getContext('2d')
. Modernizr'in de sonucunu kontrol etmesinin nedeni budur .getContext('2d')
. Ancak, WebIDL ve HTML - yine - bize daha iyi, daha hızlı bir seçenek sunar:
var canvas2DSupported = !!window.CanvasRenderingContext2D;
Tuval öğesini kontrol etmeyi tamamen atlayabileceğimize ve doğrudan 2B oluşturma desteğini kontrol etmeye gidebileceğimize dikkat edin. CanvasRenderingContext2D
Arayüz ayrıca HTML şartnamenin parçasıdır.
Sen gerekir kullanmak getContext
yaklaşımı WebGL tespit etmek için tarayıcının destekleyebileceği bile, çünkü destek WebGLRenderingContext
, getContext()
döndürebilir null adlı tarayıcı nedeniyle sürücü sorunları GPU ile arayüz edemiyor ve hiçbir yazılım uygulaması varsa. Bu durumda, arabirimi kontrol etmek önce şunları kontrol etmenizi atlamanızı sağlar getContext
:
var cvsEl, ctx;
if (!window.WebGLRenderingContext)
window.location = "http://get.webgl.org";
else {
cvsEl = document.createElement("canvas");
ctx = cvsEl.getContext("webgl") || cvsEl.getContext("experimental-webgl");
if (!ctx) {
// Browser supports WebGL, but cannot create the context
}
}
Performans karşılaştırması
getContext
Firefox 11 ve Opera 11'de yaklaşımın performansı % 85-90 daha yavaş ve Chromium 18'de yaklaşık% 55 daha yavaş.