ব্রাউজারগুলিতে ক্যানভাস সমর্থন সনাক্ত করার দুটি জনপ্রিয় পদ্ধতি রয়েছে:
ম্যাটসের অস্তিত্বের জন্য যাচাইয়ের পরামর্শ , getContext
মডার্নিজার লাইব্রেরি দ্বারা এটি একই ধরণের ব্যবহৃত হয়েছিল:
var canvasSupported = !!document.createElement("canvas").getContext;
ওয়েবআইডিএল এবং এইচটিএমএল স্পেসিফিকেশন HTMLCanvasElement
দ্বারা সংজ্ঞায়িত ইন্টারফেসের অস্তিত্ব পরীক্ষা করা । আইই 9 টি দলের কোনও ব্লগ পোস্টেও এই পদ্ধতির প্রস্তাব দেওয়া হয়েছিল ।
var canvasSupported = !!window.HTMLCanvasElement;
আমার সুপারিশটি বিভিন্ন কারণে বিভিন্ন কারণে ( অতিরিক্ত নোট দেখুন ):
- আইএন 9 সহ - প্রতিটি পরিচিত ব্রাউজার ক্যানভাসকে সমর্থন করে এই ইন্টারফেসটি প্রয়োগ করে;
- কোডটি কী করছে তা এটি আরও সংক্ষিপ্ত এবং তাত্ক্ষণিকভাবে সুস্পষ্ট;
- সমস্ত ব্রাউজার জুড়ে এই
getContext
পদ্ধতিটি উল্লেখযোগ্যভাবে ধীর , কারণ এটিতে একটি HTML উপাদান তৈরি করা জড়িত। আপনার যখন যথাসম্ভব পারফরম্যান্স কষানোর দরকার হয় তখন এটি আদর্শ নয় (উদাহরণস্বরূপ মডার্নিজারের মতো একটি লাইব্রেরিতে)।
প্রথম পদ্ধতিটি ব্যবহার করার মতো কোনও লক্ষণীয় সুবিধা নেই। উভয় পন্থা ছদ্মবেশী করা যেতে পারে, তবে এটি দুর্ঘটনার দ্বারা হওয়ার সম্ভাবনা নেই।
অতিরিক্ত নোট
এটি এখনও 2 ডি প্রসঙ্গে পুনরুদ্ধার করা যেতে পারে তা যাচাই করা প্রয়োজন হতে পারে। কথিত আছে যে, কিছু মোবাইল ব্রাউজারে চেক উপরে উভয়ের জন্য সত্য ফিরে, কিন্তু আসতে পারেন null
জন্য .getContext('2d')
। এই কারণেই মডার্নিজার এর ফলাফলও পরীক্ষা করে .getContext('2d')
। তবে, ওয়েবআইডিএল এবং এইচটিএমএল - আবার - আমাদের আরও একটি ভাল, দ্রুত বিকল্প দেয়:
var canvas2DSupported = !!window.CanvasRenderingContext2D;
লক্ষ্য করুন যে আমরা পুরোপুরি ক্যানভাস উপাদানটির জন্য চেকিং এড়াতে পারি এবং 2D রেন্ডারিং সমর্থনটির জন্য সরাসরি যাচাই করতে পারি। দ্যCanvasRenderingContext2D
ইন্টারফেস এছাড়াও এইচটিএমএল স্পেসিফিকেশন অংশ।
আপনি আবশ্যক ব্যবহার getContext
পদ্ধতির WebGL এর detecting জন্য , কারণ যদিও ব্রাউজারকে সমর্থন করতে পারে সমর্থন 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% ধীর গতির the