【问题标题】:WInJS: Unload x-ms-webview when user navigates away from the pageWInJS:当用户离开页面时卸载 x-ms-webview
【发布时间】:2014-04-24 02:32:12
【问题描述】:

我的 WinJS 应用程序中有一个 x-ms-webview 控件,用于播放 youtube 视频。

当我离开页面时,视频中的音频会继续播放,因为(我假设)网络视图没有正确卸载。

当用户离开页面时,移除 webview 的最佳方法是什么?

HTML:<x-ms-webview id="videoPlayer" class="videoPlayer"></x-ms-webview>

JS:videoPlayer.src = video.VideoURL;

编辑:我在页面的卸载事件中使用navigateToString("") 方法尝试了一个可怕的错误。设置此属性会停止播放声音,但我希望这不是唯一可用的选项。

【问题讨论】:

  • 你今天过得怎么样?您的主机代码是否有可能引用视频播放器(或任何内部元素),这可能会导致它一直存在?
  • 在导航代码中有一个 onNavigated 事件,它在页面控件和 WinJS.Utilities.Empty 上调用 unload。我以为这可以处理所有事情?
  • 我希望它会出现,除非主机的页面中有某些东西。
  • 我在 JS 中引用 webview 控件的唯一地方是当我将 src 属性设置为 youtube 链接时。

标签: windows-8 microsoft-metro windows-8.1 winjs


【解决方案1】:

这是另一个解决方法:您可以在 PageControl 的卸载“处理程序”中处理 WebView 元素:

(function () {

    var webView,
        page = WinJS.UI.Pages.define("/pages/webView/webView.html", {
            ready: function (element, something) {

                webView = document.querySelector("#myWebView");
                webView.src = "http://www.youtube.com/watch?v=dk5-gCc_4s4";

            },
            unload: function () {
                webView.parentNode.removeChild(webView);
                webView = null;
            }
        });

})();

YouTube 视频将继续播放大约一分钟。当您使用 WebView 导航回页面时,将使用该 PageControl 重新加载元素。我认为您使用navigateToString("") 的解决方案是最好的。

【讨论】:

  • 谢谢 Eric,我将暂时保留它,但我将使用您的技术解决我在 iframe 中使用 Bing 地图时遇到的另一个问题。顺便说一句,您的书很棒!
  • 感谢您对这本书的称赞,尽管我想知道您是否在想 Kraig Brockschmidt 的书。 (顺便说一句,Kraig 非常适合使用。)如果您在 iframe 中使用 Bing 地图,您还可以考虑使用 Bing 地图 SDK(如果您还没有的话)msdn.microsoft.com/en-us/图书馆/ff428643.aspx.
  • WinRT SDK 10.0.10586 中的WebView 似乎还是有这个CPU 和内存泄漏!这确实是一个泄漏,因为加载同一页面,将从可视化树中删除所有 XAML 资源,即它们被卸载,包括 webview 本身,但 webview 继续无限运行,即运行脚本等。
  • 这在将近 2 年后仍然是一个问题......还有其他解决方法@EricSchmidt-MSFT?您提供的答案可能会也可能不会处理 DOM 节点,但它保留了底层的 webview 表示,这对于我们的视频密集型应用程序来说是一个巨大的内存泄漏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
相关资源
最近更新 更多