我开发了一个带有几个UIWebViews的UIWebViews应用程序,它采用了下面的HTML和JavaScript。由于iPad一次只能播放一个视频,所以在特定的web视图聚焦之前,我不会加载该视频。
这是通过在stringByEvaluatingJavaScriptFromString上调用UIWebView方法,发送对JS方法getFocus()的调用来完成的。类似地,当不再需要web视图时,我调用lostFocus()卸载视频。这使另一个UIWebView可以播放另一个视频。
到现在为止还好。一切都很完美。除了一件事:,这会导致内存泄漏。
我尝试过重新加载UIWebView (而不是用JS卸载视频),但没有起作用。我也尝试了无数不同的JavaScript变体,标签变体等等。
<div id="videoDiv"></div>
<script type="text/javascript">
var movieDiv = document.getElementById('videoDiv'),
movieHtml = '<video id="video" src="../Documents/<%= VideoFileName %>" width="768" height="911"></video>';
var gotFocus = function () {
movieDiv.innerHTML = movieHtml;
var movie = document.getElementById('video');
movie.play();
movie.addEventListener('pause', function () {
movie.currentTime = 0;
movie.play();
}, false);
};
var lostFocus = function () {
movieDiv.innerHTML = '';
};
</script>发布于 2011-03-09 16:38:49
我终于解决了这个问题!解决方案是清空src并“加载”一个不存在的视频。这不会导致内存泄漏。看一下:
<div id="videoDiv"></div>
<script type="text/javascript">
var movieDiv = document.getElementById('videoDiv'),
movieHtml = '<video id="video" src="" width="768" height="911"></video>';
movieDiv.innerHTML = movieHtml;
var movie = document.getElementById('video');
var gotFocus = function () {
movie.src = '../Documents/<%= VideoFileName %>';
movie.load();
movie.play();
movie.addEventListener('pause', function () {
movie.currentTime = 0;
movie.play();
}, false);
};
var lostFocus = function () {
movie.src = '';
movie.load(); // This line may be removed, see comments
};
</script>https://stackoverflow.com/questions/5170398
复制相似问题