2012-06-30 17 views
11

Dal sito degli sviluppatori di Firefox, so che Firefox utilizzaCome scegliere tra `window.URL.createObjectURL()` e `window.webkitURL.createObjectURL()` sulla base del browser

objectURL = window.URL.createObjectURL(file); 

per ottenere url di tipo di file, ma in chrome e altri browser webkit abbiamo window.webkitURL.createObjectURL() per rilevare l'url.

Non so come scambiare queste funzioni sulla base di motori del browser, e ho bisogno di essere lavorato su entrambi i browser (Chrome e Firefox)

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

risposta

22

è possibile definire una funzione 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; 
    } 
} 

E poi:

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

Penso che questo non sia più necessario come quando ho usato questo nel codice Chrome restituito "webkitURL" è deprecato. Si prega di utilizzare "URL" invece. " messaggio nella console. – Wenuka

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

Is rotonda quello che stai cercando. Inoltre, THIS esempio utilizza il molto più semplice ...

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

Semplice uno di linea:

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

Se il metodo 'createObjectURL' non Esistono nel browser, la variabile sarà 'indefinita', e il tentativo di invocarlo genererà un errore. –

+0

@ ŠimeVidas Questo è corretto ma non faceva parte della domanda. Ora è stato corretto in modo da non avere alcun sovraccarico per ogni chiamata aggiuntiva. – Trevor

Problemi correlati