2013-03-17 19 views
5

Tùy thuộc vào trình duyệt, tôi muốn xác định đối tượng nào sẽ được sử dụng. Đối với IE < 10, nó phải là XDomainRequest, đối với phần còn lại XMLHttpRequest.Cách xác định xem có nên sử dụng XMLHttpRequest hoặc XDomainRequest không?

if(window.XDomainRequest) //basically 'if IE' 
    //XDomainRequest 
else 
    //XMLHttpRequest 

Vì IE10 có hỗ trợ chia sẻ tài nguyên gốc, tốt hơn nên sử dụng đối tượng XMLHttpRequest. Mã này sẽ không hoạt động tốt nữa (Tôi cho rằng IE10 vẫn có hỗ trợ cho XDomainRequest, sửa tôi nếu tôi nhầm lẫn, tôi không thể kiểm tra nó). Kiểm tra trực tiếp trình duyệt không phải là cách an toàn nhất để xác định mọi thứ. Vì vậy, câu hỏi của tôi, cách tốt nhất để xác định đối tượng nào nên được sử dụng? Tôi đang tìm kiếm giải pháp JS (không phải jQuery) tinh khiết.

+0

Hãy thử sử dụng XMLHttpRequest, và nếu nó không thành công trong ví dụ sử dụng lệnh try/catch XdomainRequest. Tuy nhiên, một câu hỏi là bạn có gửi yêu cầu đến các miền khác không? – apelsinapa

+0

Vâng, đó là lý do tại sao tôi không thể sử dụng ý tưởng của bạn - IE <10 cũng có đối tượng 'XMLHttpRequest', nhưng nó không thể được sử dụng để yêu cầu tên miền nước ngoài. – geehertush01

+2

Điều này có giúp ích gì cho bạn không? http://stackoverflow.com/questions/1641507/detect-browser-support-for-cross-domain-xmlhttprequests – apelsinapa

Trả lời

5

Đây là cách tôi thực hiện, nhưng nó không đẹp.

var useXDR = window.XDomainRequest && (window.XMLHttpRequest && new XMLHttpRequest().responseType === undefined); 

Nó hoạt động vì IE10 có một responseType của chuỗi trống cho XHR mới được tạo nhưng trong các phiên bản của IE không hỗ trợ XHR2, nó không được xác định.

Nếu bạn đi xuống con đường này, hãy nhớ rằng XDR kém hơn nhiều so với XHR - nó cung cấp cho bạn ít thông tin hơn khi có sự cố và một số tính năng hoạt động tốt ngay cả khi triển khai XmlHttpRequest cũ không hoạt động ở tất cả trên XDR.

Ngay cả khi trình duyệt của bạn không hỗ trợ XHR2 và không hỗ trợ XDR, bạn vẫn muốn sử dụng XHR khi bạn đang yêu cầu url từ cùng một máy chủ/cổng khi trang của bạn được tải.

+1

Câu trả lời này phải được chấp nhận. Tại sao nó đã không được ít nhất là upvoted trước khi bây giờ? –

Các vấn đề liên quan