2012-06-30 181 views
11

Desde el sitio web para desarrolladores de Firefox, sé que Firefox utiliza¿Cómo elegir entre 'window.URL.createObjectURL() `y` window.webkitURL.createObjectURL() `basado en navegador

objectURL = window.URL.createObjectURL(file); 

para obtener url del tipo de archivo, pero en cromo y otros navegadores webkit tenemos window.webkitURL.createObjectURL() para detectar url.

No sé cómo intercambiar funciona esta basado en motores de navegación, y lo necesito para ser trabajado en ambos navegadores (Chrome y Firefox)

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

Respuesta

22

se puede definir una función de contenedor:

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; 
    } 
} 

Y luego:

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

Creo que esto ya no es necesario, ya que cuando lo usé en el código Chrome, la devolución "webkitURL" está en desuso. Utilice en su lugar 'URL'. " mensaje en la consola. – Wenuka

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

Es rotonda Que estas buscando. Además, THIS ejemplo se utiliza la mucho más simple ...

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

simple chiste:

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

Si el método 'createObjectURL' doesn 't existen en el navegador, la variable será 'undefined', y tratar de invocar arrojará un error. –

+0

@ ŠimeVidas Eso es correcto, pero no fue parte de la pregunta. Ahora está fijado de una manera que no tendrá ningún costo adicional para cada llamada adicional. – Trevor

Cuestiones relacionadas