2012-01-19 15 views

cevap

0

Böyle bir şey denediniz mi?

if(typeof(XMLHttpRequestUpload) == "undefined"){ 
    //not supported 
} 

Düzenleme

sana iyi bir özellik saptama olmalıdır ArrayBuffer bu

function IsArrayBufferSupported(){ 
    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', '/', true); 
    try{ 
     xhr.responseType = "arraybuffer"; 
     return true; 
    }catch(e){return false;} 
} 
+0

İyi fikir! Bununla birlikte, fark ettim ki, iOS 4.2'deki bu mobil safari, XMLHttpRequestUpload'u dahil etmeyi ama responseType = "arraybuffer" ı eklemeye yarayan "kısmi" xhr2 desteğine sahip. Soruyu buna göre güncelleyeceğim. –

+0

Görünüşe göre, responseType değeri desteklenmeyen bir değer ayarlandığında istisna yapılmaz. –

+0

Üzgünüz, bunu google chrome konsol ile test ettik ve işe yaradı. (fonksiyon IsArrayBufferSupported() { var xhr = new XMLHttpRequest(); xhr.open ('/', 'GET' doğru); deneyin { xhr.responseType = "arraybuffer"; , true; } yakalamak (e) {return false; (> ) (fonksiyon IsArrayBufferSupported (doğru))}} { var xhr = new XMLHttpRequest() ; xhr.open ('/', 'GET', gerçek); try { xhr.responseType = "badarg"; dönüş true; } catch (e) {return false;})()} > false –

2

Kontrollu gibi somthing pis ile sıkışmış olabileceğini düşünüyorum. userAgent ArrayBuffer nesneyi destekliyorsa

o zaman o belirtildiği gibi Ancak, bir özellik testi değil, bir özellik saptama yapmak iyi olurdu XHR2

ile

çalışacak olasıdır.

function IsArrayBufferSupported(cb){ 
    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', '/', true); 
    try { 
     xhr.responseType = "arraybuffer"; 
    } catch (e){ 
     return cb(false); 
    } 
    xhr.onload = function onload() { 
     if (ArrayBuffer.prototype.isPrototypeOf(this.response)) { 
      return cb(true); 
     } 
     cb(false); 
    } 
    xhr.send(); 
} 
+1

Görünüşe göre, responseType değeri desteklenmeyen bir değer ayarlandığında istisna yapılmaz. –

+0

@AronWoost Bir istisnanın işlenmesini beklemem, dolayısıyla iade türü denetimi. Ancak gelecekteki ispatlama kodu için başka bir userAgent istisnası atarsa ​​'try catch' kullanmak için değerdir. – Raynos

10

kullanıyorum şu: Bütün tarayıcılarda

var supported = typeof new XMLHttpRequest().responseType === 'string'; 

Bunu, responseType varsayılan değeri boş bir dize olduğunu test desteği (sadece spec yazdığı gibi: http://www.w3.org/TR/XMLHttpRequest/#the-responsetype-attribute), responseType'ı desteklemeyen tarayıcılarda, özniteliğin değeri tanımsızdır.

+2

Bu iyi bir test gibi görünüyor. Android 2.3 için "undefined" alıyorum, Android için 4.x "string" aldım. Http://caniuse.com/xhr2 ile iyi bir şekilde örtüşen (iOS 4.2 gibi, Android 2.3 XMLHttpRequestUpload desteğine sahip, veya en azından "typeof (XMLHttpRequestUpload)" işlevi "undefined" değil, "function" döndürüyor) –

1

Seti "arraybuffer" için responseType ve yeni bir değer var olmadığını kontrol:

// call like isResponseTypeSupported('arraybuffer') 
function isResponseTypeSupported(responseType) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', '/'); 
    try { 
     xhr.responseType = responseType; 
    } catch (e) { 
     return false; 
    } 
    return xhr.responseType === responseType; 
} 
+0

IE6 için başarısız responseType'ın desteklenip desteklenmediğini kontrol ettiğinizden. – Hydro

0

Modernizr kullanmak, bu Modernizr.xhr2 kapsamındadır.Kısmi desteğe ilişkin yorumların takiben Modernizr.dataview daha doğru olabilir.

(function(modernizr, ns){ 
    ns.isSupported = (function(){ 
     return modernizr.xhr2 && modernizr.dataview; 
    }); 

    return ns; 
}(window.Modernizr, window.NameSpace || {})); 

Her iki özelliğin de desteklenip desteklenmeyeceğini umuyorum.

0

Yalnızca "arraybuffer" yanıtının desteklenip desteklenmediğini belirlemek istiyorsanız, yalnızca genel nesnede olup olmadığını kontrol edin. Diğer özellikleri tespit etmek isterseniz, tarayıcı "" boş alana veya bir hata atıncaya kadar XHR().responseType'u atayın.

function isAjaxResponseSupported(type) { 
    var xhr = new XMLHttpRequest; 

    /* Check if .responseType is supported first */ 
    if (typeof xhr.responseType === 'string') { 

     /* Some browsers throw error for invalid .responseType */ 
     try { 
      xhr.responseType = type; 
      // If they don't, 
      // check if .responseType is equal to @type. 
      return xhr.responseType === type; 
     } catch (e) { 
      return false; 
     } 

    ; else return false;   
} 
İlgili konular