javascript window.URL在函数中是未定义的

dam*_*mon 7 javascript video html5

我是学一些javascript,选择一个文件,并使用它来创建可被设置为一个的ObjectURL src一个的html5 video.我是在想这一点镀铬版本18.0.1025.162上ubuntu lucid,并使用本地HTML文件的JavaScript文件和媒体同一文件夹中的文件.

我可以使用input元素选择一个视频文件,当我点击a时play link,执行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>
Run Code Online (Sandbox Code Playgroud)

javascript文件是

$(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);
     }     
}
Run Code Online (Sandbox Code Playgroud)

当我没有选择任何文件并单击该播放列表时,默认视频播放和控制台日志会显示为no file chosen-as expected.

选择视频文件然后单击playlink时会发生错误.然后该playVideo()方法调用setVideoSrc()控制台日志中的window.URL' isundefined`

为什么会这样?有人可以帮我纠正这个吗?这是控制台日志输出

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 
Run Code Online (Sandbox Code Playgroud)

Mau*_*ice 7

在Chrome中使用window.webkitURL.

这适用于Chrome和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;
}
Run Code Online (Sandbox Code Playgroud)

也可以看看: