2012-05-10 6 views
6

que estaba aprendiendo algunos javascript, para seleccionar un archivo y utilizarlo para crear un ObjectURL que se puede establecer como el de un srchtml5 video .I estoy tratando esto en cromo versión 18.0 .1025.162 en ubuntu lucid, y utilizando un archivo html local con un archivo javascript y archivos multimedia en la misma carpeta.Javascript window.URL no está definido en función de

Puedo seleccionar un archivo de video usando el elemento de entrada y cuando hago clic en play link, se ejecuta la función javascript playVideo().

<video id="vid" name='myvid' width="640" height="360" controls="controls"> 
     <source src="test.webm" type="video/webm" /> 
</video> 
<br><a href="#" id="playlnk">Play </a> </li> 
<br><input type="file" name="fileselect" id="fselect"> </input> 

archivo javascript es

$(document).ready(function(){ 
     player=$('#vid').get(0);   
     $('#playlink').click(function(){playVideo(player);});   
    }); 
function setVideoSrc(player,file){ 
    console.log('winurl='+window.URL); 
    var fileURL = window.URL.createObjectURL(file); 
    player.src=fileURL; 
    player.load(); 
    return; 
} 
function playVideo(player) { 
    var file=document.getElementById('fselect').files[0]; 
    console.log('you chose:'+file); 
    if (file==undefined){ 
     console.log('no file chosen'); 
    }else{ 
     console.log('file='+file); 
     setVideoSrc(player,file); 
    }  
} 

Cuando no selecciona ningún archivo y haga clic en el PlayLink, se reproduce el vídeo por defecto y la consola de registro dice no file chosen -como esperados.

El error se produce cuando Selecciono un archivo de video y luego hago clic en el enlace de reproducción. Luego, el método playVideo() llama al setVideoSrc() en el que el registro de la consola dice window.URL' is undefined`

¿Por qué sucede esto? ¿Alguien me puede ayudar a corregir esto? Aquí está la salida registro de la consola

you chose:[object File] //from playVideo() function 
file=[object File] //from playVideo() function 
winurl=undefined //setVideoSrc() function 
Uncaught TypeError: Cannot call method 'createObjectURL' of undefined 
+1

[window.URL] (https : //developer.mozilla.org/en/DOM/window.URL) es Gecko-specific. ¿Qué navegador estás usando? –

+0

Estoy usando ... chrome, ¿hay una forma independiente de navegador para hacer esto? – damon

+1

Que yo sepa, no existe (IE y Opera no parecen apoyar esto en absoluto). Chrome, sin embargo, tiene un equivalente ('window.webkitURL') [según MDN] (https://developer.mozilla.org/en/DOM/window.URL.createObjectURL). –

Respuesta

6

Uso window.webkitURL en Chrome.

Este whould funciona tanto en Chrome y Firefox

function setVideoSrc(player,file){ 
    var myURL = window.URL || window.webkitURL 
    console.log('winurl='+myURL); 
    var fileURL = myURL.createObjectURL(file); 
    player.src=fileURL; 
    player.load(); 
    return; 
} 

Ver también:

+0

hi, que da 'file = [objeto File] winurl = [DOMURL objeto]' 'pero luego fileURL = undefined' – damon

+0

creo que esto funcionará si el cromo se inicia con la bandera de acceso a archivos habilitado – damon

0

¿Ha intentado

window.location.href = "URL"; 

en lugar de window.url? Parece que la url no es una función compatible.

+0

window.URL trabaja con firefox..came con este post hace un momento http://stackoverflow.com/questions/6755401/createobjecturl-is-returning-undefined-in-chrome – damon

+0

hm, a continuación, tratar de depurar, ¿qué valor tiene en window.url cuando se ejecute el método –

+0

en la consola log window.URL imprime el valor 'undefined' – damon

0

Trate de esta manera: -

var file = document.getElementById('fselect').files[0]; 
if(file){ 
    setVideoSrc(player,file); 
} 

Por debajo del umbral funciona en Chrome y Firefox: -

window.URL.createObjectURL(file); 

Asegúrese, que está probando en los navegadores mencionados.

consultar esta información

+0

Creo que falla en cromo. Por favor, vea http://stackoverflow.com/questions/6755401/createobjecturl-is-returning-undefined-in-chrome – damon

+0

@damon: ¿Qué versión de Chrome estás usando? –