Tarayıcının XMLHttpRequest.responseType = "arraybuffer"
destekleyip desteklemediğini bilmek istiyorum. Sorun şu ki, bazı "genel" xhr2 desteklerini test edemiyorum, çünkü iOS 4.2'nin (yani) XMLHttpRequestUpload
'u içeren fakat responseType = "arraybuffer"
'u içermeyen kısmi xhr2 desteği vardır.XMLHttpRequest, responseType = "arraybuffer" öğesini destekliyorsa nasıl algılanır?
cevap
Böyle bir şey denediniz mi?
if(typeof(XMLHttpRequestUpload) == "undefined"){
//not supported
}
Düzenleme
sana iyi bir özellik saptama olmalıdırArrayBuffer
bu
function IsArrayBufferSupported(){
var xhr = new XMLHttpRequest();
xhr.open('GET', '/', true);
try{
xhr.responseType = "arraybuffer";
return true;
}catch(e){return false;}
}
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();
}
Görünüşe göre, responseType değeri desteklenmeyen bir değer ayarlandığında istisna yapılmaz. –
@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
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.
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) –
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;
}
IE6 için başarısız responseType'ın desteklenip desteklenmediğini kontrol ettiğinizden. – Hydro
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.
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;
}
- 1. Girdi türü = "tarih" yer tutucuyu destekliyorsa algılanır
- 2. XMLHttpRequest responseType = "json" hatası veriyor SYNTAX_ERR: DOM Özel Durum 12
- 3. ArrayBuffer scala
- 4. javascript/gwt: Uint8Array veya ArrayBuffer öğesini ImageData öğesine dönüştürme
- 5. node.js'de xmlhttprequest öğesini çağıran bir kütüphaneyi nasıl kullanabilirim?
- 6. Bir derleyicinin static_assert desteklemesi nasıl algılanır?
- 7. ArrayBuffer ArrayBuilder vs
- 8. Hata: ArrayBuffer undefined
- 9. arraybuffer Websocket ile ikili olarak nasıl gönderilir?
- 10. Görüntü Veri Bir XMLHttpRequest yapıyorum XMLHttpRequest
- 11. XMLHttpRequest Google Chrome'u gerçekten yavaşlatıyor
- 12. Bir XMLHttpRequest
- 13. MKUserTrackingBarButtonItem kullanıldığında nasıl algılanır
- 14. Tablet modu nasıl algılanır
- 15. Windows nasıl algılanır?
- 16. UITextField boşaldığında nasıl algılanır?
- 17. Üç.js'deki çarpışma nasıl algılanır?
- 18. Ağda cihaz nasıl algılanır?
- 19. WindowState değişiklikleri nasıl algılanır?
- 20. Ses kapatılamadığında nasıl algılanır?
- 21. Parametreleri XMLHttpRequest nesnesine geçirme
- 22. XMLHttpRequest Uygulamasını nerede bulabilirim?
- 23. arrayBuffer bir mp3 ses dosyasına nasıl dönüştürülür? Javascript AudioContext kullanarak
- 24. Chrome'un yükleme göstergesi XMLHttpRequest
- 25. XMLHttpRequest JS Görüntü yükleme
- 26. Android'de EditText'teki ifadeler nasıl algılanır?
- 27. Önişlemcideki "MFC Kullan" nasıl algılanır
- 28. ASP.NET'ten .NET 4 nasıl algılanır?
- 29. İyonik: Alt kaydırma nasıl algılanır?
- 30. IOS ile Parmaklar Nasıl Algılanır?
İ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. –
Görünüşe göre, responseType değeri desteklenmeyen bir değer ayarlandığında istisna yapılmaz. –
Ü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 –