ब्राउज़रों में कैनवास समर्थन का पता लगाने के दो लोकप्रिय तरीके हैं:
के अस्तित्व की जाँच के लिए मैट का सुझावgetContext
, जिसका उपयोग मॉडर्निज़्र लाइब्रेरी द्वारा भी इसी तरह किया गया है:
var canvasSupported = !!document.createElement("canvas").getContext;
HTMLCanvasElement
इंटरफ़ेस के अस्तित्व की जाँच करना , जैसा कि वेबआईडीएल और एचटीएमएल विनिर्देशों द्वारा परिभाषित किया गया है । IE 9 टीम से एक ब्लॉग पोस्ट में भी इस दृष्टिकोण की सिफारिश की गई थी ।
var canvasSupported = !!window.HTMLCanvasElement;
मेरी सिफारिश कई कारणों से उत्तरार्द्ध का एक रूपांतर है ( अतिरिक्त नोट्स देखें ):
- कैनवास का समर्थन करने वाला प्रत्येक ज्ञात ब्राउज़र - IE 9 सहित - इस इंटरफ़ेस को लागू करता है;
- यह अधिक संक्षिप्त है और तुरंत स्पष्ट है कि कोड क्या कर रहा है;
getContext
दृष्टिकोण है काफी धीमी सभी ब्राउज़र में , क्योंकि यह एक HTML तत्व बनाने होते हैं। यह आदर्श नहीं है जब आपको जितना संभव हो उतना प्रदर्शन को निचोड़ने की आवश्यकता होती है (उदाहरण के लिए, माडर्निज़्र जैसे पुस्तकालय में)।
पहली विधि का उपयोग करने के लिए कोई ध्यान देने योग्य लाभ नहीं हैं। दोनों दृष्टिकोण खराब हो सकते हैं, लेकिन दुर्घटना से ऐसा होने की संभावना नहीं है।
अतिरिक्त नोट्स
यह अभी भी जांचना आवश्यक हो सकता है कि 2 डी संदर्भ को पुनर्प्राप्त किया जा सकता है। कथित तौर पर, कुछ मोबाइल ब्राउज़र उपरोक्त दोनों चेक के लिए सही हो सकते हैं, लेकिन वापस आ सकते null
हैं .getContext('2d')
। यही कारण है कि Modernizr के परिणाम की जाँच भी करता है .getContext('2d')
। हालाँकि, WebIDL और HTML - फिर - हमें एक और बेहतर, तेज विकल्प देता है:
var canvas2DSupported = !!window.CanvasRenderingContext2D;
ध्यान दें कि हम कैनवास तत्व के लिए पूरी तरह से जाँच को छोड़ सकते हैं और सीधे 2D रेंडरिंग समर्थन के लिए जाँच कर सकते हैं। CanvasRenderingContext2D
इंटरफ़ेस भी एचटीएमएल विनिर्देशन का हिस्सा है।
आपको WebGL समर्थन का पता लगाने के लिए दृष्टिकोण का उपयोग करना चाहिए , क्योंकि भले ही ब्राउज़र समर्थन कर सकता है , लेकिन यदि ड्राइवर समस्याओं के कारण GPU के साथ ब्राउज़र को इंटरफ़ेस करने में असमर्थ है और कोई सॉफ्टवेयर कार्यान्वयन नहीं है , तो वह अशक्त हो सकता है । इस मामले में, इंटरफ़ेस के लिए जाँच करने से पहले आप इसके लिए जाँच छोड़ सकते हैं :getContext
WebGLRenderingContext
getContext()
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
}
}
प्रदर्शन तुलना
getContext
फ़ायरफ़ॉक्स 11 और ओपेरा 11 में दृष्टिकोण का प्रदर्शन 85-90% धीमा है और क्रोमियम 18 में लगभग 55% धीमा है।