আমি মনে করি এরকম কিছু কাজ করতে পারে:
var hasWebP = false;
(function() {
var img = new Image();
img.onload = function() {
hasWebP = !!(img.height > 0 && img.width > 0);
};
img.onerror = function() {
hasWebP = false;
};
img.src = 'http://www.gstatic.com/webp/gallery/1.webp';
})();
ফায়ারফক্স এবং আইইতে, "অনলোড" হ্যান্ডলারটি ঠিক তখনই ডাকা যাবে না যদি চিত্রটি বোঝা যায় না, এবং পরিবর্তে "অ্যানরর" ডাকা হয়।
আপনি jQuery উল্লেখ করেন নি, তবে কীভাবে সেই চেকটির অ্যাসিনক্রোনাস প্রকৃতির সাথে মোকাবিলা করবেন তার উদাহরণ হিসাবে আপনি কোনও jQuery "ডিফার্ড" অবজেক্ট ফিরিয়ে দিতে পারবেন:
function hasWebP() {
var rv = $.Deferred();
var img = new Image();
img.onload = function() { rv.resolve(); };
img.onerror = function() { rv.reject(); };
img.src = 'http://www.gstatic.com/webp/gallery/1.webp';
return rv.promise();
}
তাহলে আপনি লিখতে পারেন:
hasWebP().then(function() {
}, function() {
});
এখানে একটি jsfiddle উদাহরণ।
আরও উন্নত পরীক্ষক: http://jsfiddle.net/JMzj2/29/ । এটি একটি ডেটা ইউআরএল থেকে চিত্রগুলি লোড করে এবং এটি সফলভাবে লোড হচ্ছে কিনা তা পরীক্ষা করে। যেহেতু ওয়েবপি এখন লসলেস ইমেজগুলিকে সমর্থন করে, আপনি এখনকার ব্রাউজারটি কেবল ক্ষতিকারক ওয়েবপি বা লসলেস ওয়েবপিকে সমর্থন করে কিনা তা আপনি পরীক্ষা করতে পারেন। (দ্রষ্টব্য: এটি স্পষ্টভাবে ডেটা ইউআরএল সমর্থনের জন্যও পরীক্ষা করে))
var hasWebP = (function() {
var images = {
basic: "data:image/webp;base64,UklGRjIAAABXRUJQVlA4ICYAAACyAgCdASoCAAEALmk0mk0iIiIiIgBoSygABc6zbAAA/v56QAAAAA==",
lossless: "data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA="
};
return function(feature) {
var deferred = $.Deferred();
$("<img>").on("load", function() {
if(this.width === 2 && this.height === 1) {
deferred.resolve();
} else {
deferred.reject();
}
}).on("error", function() {
deferred.reject();
}).attr("src", images[feature || "basic"]);
return deferred.promise();
}
})();
var add = function(msg) {
$("<p>").text(msg).appendTo("#x");
};
hasWebP().then(function() {
add("Basic WebP available");
}, function() {
add("Basic WebP *not* available");
});
hasWebP("lossless").then(function() {
add("Lossless WebP available");
}, function() {
add("Lossless WebP *not* available");
});