2015-10-20 51 views
2

恐怕與im具有相同的探針this unasnwered question.IOS更改IFRAME src時使用angular/Embedding youtube在cordova時的內存堆積?

我有一個空白IFRAME在我的科爾多瓦離子IOS應用程序嵌入的YouTube視頻。

我通過單擊下一個視頻來更改iframe的NG-SRC =「」。但經過測試,似乎電話/ cordova/webview正在緩存iframe的舊內容。在內存崩潰之前,我只能看到20個左右的視頻。

我已經嘗試使用angular.element.remove()刪除iframe以及將iframe src設置爲第一個空白,並且都沒有影響每個Xcode使用多少內存。我也嘗試過cordova插件ClearCache,並且沒有清除任何內存。

請幫忙!有沒有更好的方法在cordova應用中嵌入youtube? 我已經花了幾個星期的這一切工作,有它轟然倒下我身邊(沒有雙關語意)

我的影片的看法是這樣的:

<ion-view view-title="Random Video"> 

      <iframe id="youtube" sandbox="allow-scripts allow-same-origin" ng-src="{{video.url | trustAsResourceUrl}}" frameborder="0" allowfullscreen></iframe> 

      <h4>{{video.title}}</h4> 

     <button ng-click="nextVideo()"> 
</ion-view> 

我的控制器是這樣的:

angular.module('starter.controllers') 
.controller('VideoCtrl', function(VideoService) {  

     $scope.video = {}; 


     $scope.nextVideo = function() { 
     $scope.video = null; //doesnt seem to help 
     //$scope.$destroy(); //doesn't help 
     //angular.element(document.querySelector('#youtube')).attr("src", " "); 
     //angular.element(document.querySelector('#youtube')).remove(); 

     //neither of the above 2 remove any memory 

     VideoService.getVideo().then(function(response){ 
       $scope.video = response.data; 
     }); 
     } 

     $scope.nextVideo(); 


}); 

請注意,當我將應用程序加載到網站上並加載到Chrome時,我可以在視頻中循環瀏覽視頻,而無需查看內存使用情況(查看taskmgr.ex e至少)

回答

0

這似乎將iframe設置爲空字符串應該足夠了,但對於某些瀏覽器和某些情況則不行。可能需要遞歸刪除事件偵聽器和元素。或許令人驚奇地,該遞歸方法(1)所示不僅僅是設置爲空字符串(2)更快:

1.Recursive

while (box.lastChild) { 
    box.removeChild(box.lastChild); 
} 

2.設置空字符串

myNode.innerHTML = ''; 

請參閱https://stackoverflow.com/a/3955238/1158376以供參考。

此外,在遞歸方法中,可能需要對某些項目應用特殊處理,例如先刪除事件偵聽器,清除函數(http://javascript.crockford.com/memory/leak.html),並使用專用的清理方法,如jQuery(http://javascript.info/tutorial/memory-leaks)。

您可以嘗試的另一種策略是爲每個播放的視頻加載一個全新的iframe。加載新頁面應該使瀏覽器能夠釋放之前聲明的內存。