UIWebView和keep-alive?

时间:2012-05-06 12:53:39

标签: ios uiwebview keep-alive

我正在设置UIWebView以通过检索MPJEG流的网址显示网络摄像头的内容。

我发现如果我想切换到另一台相机,如果我没有重置UIWebView的全部内容,它看起来会更顺畅,而是在我加载到它的页面中设置一个javascript函数,替换图像的内容,如下:

<img id='iImage' src='about:blank'>
<script type='text/javascript'>
function show(url)
{
    iImage.src = url;
}
</script>

如果我没有这样做,每次切换到新网址时,UIWebView都会变白一两秒,直到新内容准备好显示,上面的代码只是取代了内容直接,没有白化。

但是,如果我在两个视频流之间来回切换,在某些时候我会在UIWebView中收到错误,经过反复试验我发现第4次出现这种情况时会发生这种错误在视图中的视频流。如果我尝试在浏览器选项卡中打开4个视频流,那么第4个会在加载周期中陷入困境,直到我关闭前三个中的一个。

这让我相信:

  1. 相关相机只能同时提供3个流
  2. 更改src标记上的<img...>属性不会关闭上一个流
  3. 这可以与keepalive联系起来吗?即使我已经停止在<img...>标记中显示它们,webkit浏览器系统是否可以使之前的流保持活动状态?

    基本上,要重现我可以这样做:

    1. UIWebView
    2. 中设置上述内容
    3. 拨打4次电话:wv.EvaluateJavascript("show(url)")
    4. 在第4个电话中,我在中间有一个蓝色问号。

      可以保持活着是罪魁祸首吗?如果是这样,我能控制它吗?

1 个答案:

答案 0 :(得分:5)

这是由WebKit导致的,即使源已更改,也无法停止加载图像资源。这通常不会导致图像出现问题,但是永无止境的流式图像会导致它在重新加载页面之前永远不会松开。

针对Chromium提出了一个针对此问题的错误。 https://code.google.com/p/chromium/issues/detail?id=73395

在评论主题中,解决方法是在更改图像之前调用window.stop()。这与在浏览器中单击停止并导致所有加载资源中止相同。希望这不会导致页面重新加载的事实将避免你的白色闪光。

我会尝试以下方法:

<img id='iImage' src='about:blank'>
<script type='text/javascript'>
function show(url)
{
    window.stop();
    iImage.src = url;
}
</script>