加载/卸载HTML5时iOS Safari内存泄漏< video>

svujldwt  于 2023-07-01  发布在  iOS
关注(0)|答案(2)|浏览(145)

我已经开发了一个带有几个UIWebView的iPad应用程序,它采用以下HTML和JavaScript。由于iPad一次只能播放一个视频,所以我不会加载视频,直到特定的Web视图被聚焦。
这是通过调用UIWebView上的 stringByEvaluatingJavaScriptFromString 方法,发送对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>
ma8fv8wu

ma8fv8wu1#

我终于解决了!解决方案是清空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>
vulvrdjw

vulvrdjw2#

看起来@simeon的问题/解决方案在2023年仍然与iOS 16相关。

相关问题