2012-06-30 33 views
11

Từ trang web của nhà phát triển Firefox, tôi biết rằng Firefox sử dụngLàm thế nào để lựa chọn giữa 'window.URL.createObjectURL() `và` window.webkitURL.createObjectURL() `dựa trên trình duyệt

objectURL = window.URL.createObjectURL(file); 

để có được url loại tệp nhưng trong chrome và các trình duyệt webkit khác, chúng tôi có window.webkitURL.createObjectURL() để phát hiện url.

Tôi không biết làm thế nào để trao đổi các chức năng này dựa trên các công cụ trình duyệt, và tôi cần nó để được làm việc trên cả hai trình duyệt (Chrome và firefox)

https://developer.mozilla.org/en/DOM/window.URL.createObjectURL

Trả lời

22

Bạn có thể định nghĩa một hàm wrapper:

function createObjectURL (file) { 
    if (window.webkitURL) { 
     return window.webkitURL.createObjectURL(file); 
    } else if (window.URL && window.URL.createObjectURL) { 
     return window.URL.createObjectURL(file); 
    } else { 
     return null; 
    } 
} 

Và sau đó:

// works cross-browser 
var url = createObjectURL(file); 
+1

Tôi nghĩ rằng điều này không còn cần thiết như khi tôi sử dụng mã này trong Chrome, "webkitURL" bị phản đối. Vui lòng sử dụng 'URL' thay thế. " tin nhắn trong giao diện điều khiển. – Wenuka

7
if (window.URL !== undefined) { 
    window.URL.createObjectURL(); 
} else if (window.webkitURL !== undefined) { 
    window.webkitURL.createObjectURL(); 
} else { 
    console.log('Method Unavailable: createObjectURL'); 
} 

là tròn về những gì bạn đang tìm kiếm. Ngoài ra, THIS dụ sử dụng đơn giản hơn các nhiều ...

window.URL = window.URL || window.webkitURL; 
21

Simple lót:

var createObjectURL = (window.URL || window.webkitURL || {}).createObjectURL || function(){}; 
+1

Nếu phương thức 'createObjectURL' không không tồn tại trong trình duyệt, biến sẽ là 'undefined' và cố gắng gọi nó sẽ gây ra lỗi. –

+0

@ ŠimeVidas Điều đó đúng nhưng không phải là một phần của câu hỏi. Nó bây giờ được cố định theo cách sẽ không có bất kỳ chi phí nào cho mỗi cuộc gọi bổ sung. – Trevor

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