Tôi muốn biết liệu trình duyệt có hỗ trợ XMLHttpRequest.responseType = "arraybuffer"
hay không. Vấn đề là, tôi không thể kiểm tra lại một số hỗ trợ xhr2 "chung", vì iOS 4.2 có hỗ trợ một phần xhr2 bao gồm (tức là) XMLHttpRequestUpload
nhưng không phải là responseType = "arraybuffer"
.Cách phát hiện tính năng nếu XMLHttpRequest hỗ trợ responseType = "arraybuffer"?
Trả lời
Bạn đã thử một cái gì đó như thế này chưa?
if(typeof(XMLHttpRequestUpload) == "undefined"){
//not supported
}
Sửa
Tôi nghĩ rằng bạn có thể bị mắc kẹt với somthing khó chịu như thế này
function IsArrayBufferSupported(){
var xhr = new XMLHttpRequest();
xhr.open('GET', '/', true);
try{
xhr.responseType = "arraybuffer";
return true;
}catch(e){return false;}
}
Kiểm tra của ArrayBuffer
phải là một phát hiện tính năng tốt.
Nếu một UserAgent hỗ trợ các đối tượng ArrayBuffer
sau đó nó có khả năng nó sẽ làm việc với XHR2
Tuy nhiên như đã nói, nó sẽ là tốt nhất để làm một thử nghiệm tính năng và không phải là một phát hiện tính năng.
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();
}
Dường như không có ngoại lệ nào được kích hoạt khi responseType đặt giá trị không được hỗ trợ. –
@AronWoost Tôi hy vọng sẽ không có ngoại lệ nào được kích hoạt, do đó kiểm tra kiểu trả về. Tuy nhiên đối với mã kiểm soát trong tương lai, nó có giá trị để sử dụng 'try catch' trong trường hợp bất kỳ userAgent khác ném một ngoại lệ – Raynos
Tôi đang sử dụng như sau:
var supported = typeof new XMLHttpRequest().responseType === 'string';
Trong tất cả các trình duyệt Tôi đã thử nghiệm rằng sự hỗ trợ này, giá trị mặc định của responseType là một chuỗi rỗng (giống như nó nói trong spec: http://www.w3.org/TR/XMLHttpRequest/#the-responsetype-attribute), trong các trình duyệt không hỗ trợ responseType, giá trị của thuộc tính không được xác định.
Điều này có vẻ là một thử nghiệm tốt. Đối với Android 2.3 tôi nhận được "không xác định", cho Android 4.x tôi nhận được "chuỗi". Tương ứng với http://caniuse.com/xhr2 (Giống như iOS 4.2, Android 2.3 dường như có hỗ trợ XMLHttpRequestUpload hoặc ít nhất 'typeof (XMLHttpRequestUpload)' trả về "chức năng", không phải "không xác định") –
Set responseType
để "arraybuffer"
và kiểm tra xem nó có giá trị mới:
// 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;
}
Không thành công cho IE6 vì bạn không kiểm tra xem 'responseType' có được hỗ trợ hay không. – Hydro
Sử dụng Modernizr này được bảo vệ dưới Modernizr.xhr2
. Theo dõi các nhận xét về hỗ trợ một phần Modernizr.dataview thậm chí có thể chính xác hơn.
(function(modernizr, ns){
ns.isSupported = (function(){
return modernizr.xhr2 && modernizr.dataview;
});
return ns;
}(window.Modernizr, window.NameSpace || {}));
Tôi mong đợi cả hai tính năng đều được hỗ trợ hay không.
Nếu bạn chỉ muốn phát hiện nếu đáp ứng "arraybuffer"
được hỗ trợ, chỉ cần kiểm tra xem nó có trong đối tượng chung không. Nếu bạn muốn phát hiện các tính năng khác chỉ cần gán XHR().responseType
cho đến khi trình duyệt trống ""
hoặc ném lỗi.
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. jQuery $ .ajax hoặc $ .load có cho phép responseType arrayBuffer không?
- 2. Phát hiện hỗ trợ cho HTML cụ thể 5 tính năng thông qua jQuery
- 3. là có một cách hữu hiệu đối với tính năng phát hiện hỗ trợ cho hình ảnh: base64 dữ liệu
- 4. Tệp không hỗ trợ tính năng ARC, cách xử lý
- 5. Cách phát hiện hỗ trợ JSON trong javascript?
- 6. Làm cách nào để phát hiện hỗ trợ `focusin`?
- 7. Làm cách nào để phát hiện hỗ trợ rel = "noreferrer"?
- 8. Phát hiện hỗ trợ trình duyệt cho HTML Media Capture
- 9. phát hiện hỗ trợ chuyển tiếp css với modernizr
- 10. Phát hiện hỗ trợ cho kích thước nền: che
- 11. Phát hiện hỗ trợ âm thanh html5 với Modernizr
- 12. Phát hiện nếu dịch vụ trợ năng của tôi được bật
- 13. Phát hiện ... Hỗ trợ vòng lặp trong JavaScript
- 14. Mẫu bộ xử lý phát hiện iPhone/hỗ trợ NEON
- 15. Tính năng C++ 11 nào hỗ trợ Visual Studio 2010?
- 16. Trình duyệt webview có hỗ trợ tính năng html5 không?
- 17. Internet Explorer 8 hỗ trợ tính năng CSS3 nào?
- 18. Phát hiện hỗ trợ cho thuộc tính hộp cát iframe HTML5
- 19. Phát hiện hỗ trợ cho HTML5 <input form = ""> thuộc tính
- 20. Cách kiểm tra xem gửi() của XMLHttpRequest có hỗ trợ Tệp
- 21. phát hiện hỗ trợ in đậm và in nghiêng
- 22. Tính năng phát hiện đối tượng địa điểm của HTML5
- 23. Cách phát hiện thiết bị Android cho dù nó hỗ trợ bản đồ google API
- 24. Android - Tính năng phát hiện khuôn mặt
- 25. Phát hiện khả năng CSS với Javascript
- 26. Cách phát hiện xem trình duyệt có hỗ trợ flash không?
- 27. boost.python không hỗ trợ tính song song?
- 28. Cách phát hiện xem có hỗ trợ điều khiển đầu vào HTML5 không?
- 29. Android Cách kiểm tra chức năng gọi hỗ trợ thiết bị/máy tính bảng
- 30. Tính năng phát hiện: tính khả dụng của sự kiện đột biến trong JavaScript?
Ý tưởng hay! Tuy nhiên, tôi chỉ nhận thấy rằng, safari di động trên iOS 4.2 đã có hỗ trợ xhr2 "một phần", mà các đường nối để bao gồm XMLHttpRequestUpload nhưng không phải responseType = "arraybuffer". Tôi sẽ cập nhật câu hỏi cho phù hợp. –
Dường như không có trường hợp ngoại lệ nào được kích hoạt khi responseType đặt giá trị không được hỗ trợ. –
Xin lỗi, đã kiểm tra điều này với bảng điều khiển google chrome và nó hoạt động. (chức năng IsArrayBufferSupported() {var XHR = new XMLHttpRequest(); xhr.open ('GET', '/', true); try { XHR.responseType = "arraybuffer"; trả về true; } catch (e) {return false;} })() > true (chức năng IsArrayBufferSupported() {var XHR = new XMLHttpRequest(); xhr.open ('GET', '/', true); try { xhr.responseType = "badarg"; return true; } catch (e) {return false;} })() > sai –