我尝试使用HTML5视频构建基于JS的本地媒体。该代码与此JSBIN中的代码相同,它适用于在线内容。但是当我使用这个代码与本地文件(比如,你可以find here)Safari浏览器引发错误Safari中的HTML5-Bug?使用本地文件时视频不起作用
INVALID_STATE_ERR:DOM异常11:试图使用一个 对象不是,或不再,可用。
第三次通过点击缩略图图像开启视频后,该图像打开播放器并加载视频URL。
错误来自'$ vplayer.currentTime = 0.0;'没有这条线,问题依然存在,但根本没有错误发生。
我知道这个错误意味着视频没有加载,它是由引起的 - 但为什么它之前加载前两次?
编辑:我也试着从“文件://”使用绝对路径不同的方法来“文件:///” - 没有什么变化。
编辑:我发现使用的Objective-C的WebView组件(IOS)的浏览器引擎,当这种行为已经一去不复返了。当使用chrome时它也可以工作。所以它似乎是一个safari的bug?
使用的代码:
<html>
<head>
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
</head>
<body>
<div data-role="page" id="gamepad">
<div id="videolink">
</div>
<div data-role="popup" id="vplayerpopup" data-position-to="window" data-overlay-theme="a" data-theme="a" class="ui-content" data-tolerance="5,5,5,5" data-transition="fade">
<a href="#" data-rel="back" data-role="button" data-theme="a" data-icon="delete" data-iconpos="notext" class="ui-btn-right">Close</a>
<video id="vplayer" width="640" height="360" controls>
<source id="vsource" src="" type="video/mp4" />
</video>
</div>
</div>
</body>
</html>
和
var $videoblock = '<div class="ui-block-a videoblock">'
+ ' <div class="videoPreviewImageWrapper">'
+ ' <a href="#vplayerpopup" data-rel="popup" onclick="mediathekVideolink = \'http://blog.gingertech.net/wp-content/uploads/2011/01/LCA_MM_AVProc2011/HelloWorld.mp4\';">'
+ ' <div class="videolink">'
+ ' <img src="http://leanbackplayer.com/videos/poster/sintel_640x360.jpg" width="218" height="164" alt="Movie Title">'
+ ' <div class="mediathek_film_titel">Movie Title</div>'
+ ' <div class="mediathek_film_dauer">03:56</div>'
+ ' <div class="mediathek_film_text">Some Text about the video</div>'
+ ' </div>'
+ ' </a>'
+ ' </div>'
+ '</div>';
$('#videolink').append($videoblock);
var mediathekVideolink = 'none';
var mediaplayerIsPlaying = false;
$('#gamepad').live('pagebeforeshow', function(){
$("#vplayerpopup").on({
popupbeforeposition: function(opt1, opt2) { //console.log('mediathekVideolink: ' + mediathekVideolink);
//console.log('popupbeforeposition');
$('#vsource').attr('src', mediathekVideolink);
var $vplayer = $('#vplayer').get(0);
if(!mediaplayerIsPlaying) {
$vplayer.load();
$vplayer.play();
mediaplayerIsPlaying = true;
}
},
popupafterclose: function() {
//console.log('popupafterclose');
mediaplayerIsPlaying = false;
var $vplayer = $('#vplayer').get(0); //console.log('currentTime: ' + $vplayer.currentTime); console.log('currentSrc: ' + $vplayer.currentSrc);
$vplayer.pause();
$vplayer.currentTime = 0.0;
}
});
});
$('#gamepad').live('pagehide', function(){
$("#vplayerpopup").off();
});
这是因为我问的问题很难回答。 ;-) 我尽我所能,人......而一个简单的价值不是我称之为分析的东西。至少我做了一个实例! – headkit
哦 - 我回答了我的问题。他们中的许多人我自己回答,神经接受他们。我现在好些了吗? :-) [hostory:变化率从62%到92%] – headkit
我创建了一个[jsfiddle](http://jsfiddle.net/Twisty/8mtWH/2/)来更好地理解它。我猜'var $ videoblock'是选择电影时会返回的示例内容吗?如果仅在使用本地文件时发生,我们如何复制或解决问题? – Twisty