मुझे लगता है कि इस तरह से कुछ काम हो सकता है:
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';
})();
फ़ायरफ़ॉक्स और IE में, "ओनलोड" हैंडलर को बिल्कुल नहीं बुलाया जाएगा अगर छवि को समझा नहीं जा सकता है, और इसके बजाय "ऑनरोर" कहा जाता है।
आपने 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/ । यह एक डेटा URL से छवियों को लोड करता है और जाँचता है कि क्या यह सफलतापूर्वक लोड होता है। चूंकि WebP अब दोषरहित छवियों का भी समर्थन करता है, आप जाँच सकते हैं कि वर्तमान ब्राउज़र सिर्फ हानिपूर्ण WebP का समर्थन करता है या दोषरहित WebP का भी। (नोट: यह स्पष्ट रूप से डेटा URL समर्थन के लिए भी जाँच करता है।)
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");
});