2010-03-11 49 views
9

Phương thức send() của XMLHttpRequest của Safari hỗ trợ đối số Tệp hay không. Firefox chưa (chưa).Cách kiểm tra xem gửi() của XMLHttpRequest có hỗ trợ Tệp

Làm cách nào để kiểm tra xem điều này có được hỗ trợ không? Trong Firefox, nó sẽ hoạt động như thể một chuỗi rỗng đã được thông qua.

Tôi đang cố gắng tránh phát hiện phiên bản trình duyệt.

Chỉnh sửa: FF 3.6 có vẻ như hỗ trợ, nhưng câu hỏi vẫn có liên quan đến các phiên bản cũ hơn hoặc các trình duyệt khác.

+1

firefox <= 3.5 hỗ trợ gửi tập tin theo cách này: xhr.sendAsBinary (file.files [0] .getAsBinary()); nơi file.files [0] .getAsBinary() là điểm tập tin đầu vào – albanx

Trả lời

2

Có thể nếu đối tượng Tệp có thể được tạo, thay vì gửi hỗ trợ nó. Trong Gecko (firefox,) điều đó sẽ đúng (Tệp và khả năng tương thích của tệp gửi đều được phát hành theo phiên bản 1.9 theo MDC)

+0

nói cách khác, 'if (typeof File ===" object ") {...}' – s4y

-1

Sniffing trình duyệt cũ có thể giúp đỡ không? jQuery.support có thể là đủ?

+1

"Tôi đang cố gắng tránh phát hiện phiên bản trình duyệt. " Bên cạnh đó, thử nghiệm nào trong các bài kiểm tra jQuery.support cho việc này. –

0

Bạn nên thử sử dụng Function.length.

EDIT

Giải pháp này sẽ không làm việc như File không được thông qua như là một cuộc tranh cãi thêm, như đã chỉ ra bởi rnicholson.

+0

Tôi không hiểu điều này sẽ giúp ích gì. (cửa sổ mới.XMLHttpRequest) .send.length sẽ trả về 1 trong cả hai trình duyệt, phải không? – rnicholson

+0

Thật vậy, lỗi của tôi. Tôi chỉ giả định 'Tệp' sẽ là một đối số bổ sung. Tôi có nên xóa câu trả lời không? –

0

Tôi nghĩ rằng một cái gì đó như thế này là những gì bạn có thể tìm cho:

const XMLHttpFactories = [ 
    function() { return new XDomainRequest(); }, 
    function() { return new XMLHttpRequest(); }, 
    function() { return new ActiveXObject("Msxml2.XMLHTTP"); }, 
    function() { return new ActiveXObject("Msxml3.XMLHTTP"); }, 
    function() { return new ActiveXObject("Microsoft.XMLHTTP"); }, 
]; 

var xhr = null; 

for (var i = 0; i < XMLHttpFactories.length; i++) { 
    try { xhr = XMLHttpFactories[i](); break; } catch (exception) { continue; } 
} 

if (!(xhr && ('upload' in xhr) && ('onprogress' in xhr.upload))) { 
    alert("Sorry, your browser is not supported."); 
    return; 
} 
Các vấn đề liên quan