2013-02-11 3 views
9

VideoJS website에서 지원이 StackOverflow로 옮겨 졌으므로 여기에서 시도해 보겠습니다. 다음 코드가 있습니다.VideoJS - 파괴 및 초기화 할 수 없음

var player = _V_('the_id', {}, function(){ 
    jQuery('.remove').on('click.destroyvideojs', function(){ 
     player.destroy(); 
     jQuery(this).unbind('click.destroyvideojs'); 
    }); 
}); 

처음에는 비디오를 초기화하고 비디오를 초기화합니다.

하지만 똑같은 코드 조각을 사용하여 다시 초기화하려고 할 때 작동하지 않습니다. 동일한 요소 ID (DOM에서 제거되고 추가 된 후 올바른 초기화 호출로 다시 추가 된 경우)에서 스크립트를 초기화하지 않습니다. 왜 이런 일이 일어날 지 궁금하네요?

또 다른 시도 오늘 :

var the_id = 'my_id'; 
var player = _V_(the_id, {}, function(){   
    player.destroy(); 
    _V_(the_id, {}, function(){ 
     alert('reinit'); 
    }); 
}); 

그래서, VideoJS의 재 초기화가 간단하게 작동하지 않습니다. 또한 비디오에서 컨트롤을 제거했습니다.

+0

나는 동일한 문제가 있습니다. – dinodsaurus

답변

0

콜백이 실행될 때 player이 정의되지 않은 것으로 보입니다. 이 js 바이올린을보세요 http://jsfiddle.net/gaboesquivel/BA8Pm/

destroy();이 저에게 효과적입니다. 이 방법 함수가

destroy: function() { 
      this.stopTrackingProgress(); 
      this.stopTrackingCurrentTime(); 
      _V_.players[this.id] = null; 
      delete _V_.players[this.id]; 
      this.tech.destroy(); 
      this.el.parentNode.removeChild(this.el) 
     } 

검사처럼이 솔루션 너무 http://help.videojs.com/discussions/problems/861-how-to-destroy-a-video-js-object#comment_13544514

0

내가 같은 질문 전면에 응답을 찾기 어렵다, 내 머리에서 내 토끼의 일부를 뽑아 본다 ... 그래서 여기 내 솔루션입니다 , JQuery와 함께 ... 솔루션은 초기화되지 않은 플레이어 개체를 어떻게 파헤칠 지에 대한 질문에서 태어났습니다. 여러분은 하루 종일 저축합니다. 우리는 HTML 플레이어를 제거하고 동적 플레이어를 다시 초기화하더라도 플래시가 되살아나는 unshowed undestroyed 미디어 플레이어에서 작동하지 않습니다. 그래서 여기에 솔루션입니다 :

$.each(_V_.players, function (key, player) { 
    if (player.isReady) { player.destroy(); } 
    else { delete _V_.players[player.id]; } 
}); 

좀 지저분하지만 잘 할 것입니다. 건배!

20

는 경우이는 버전 4에서 dispose을처럼 보이는, 사람을 도움 :

var player = videojs('my-video'); 
player.dispose(); 
+0

고마워요! 이 문제에 대한 해결책을 찾기까지 어느 정도 시간이 걸렸습니다. – Soska

+2

dispose() 메소드가 마크 업에서 비디오 요소를 제거하는 것 같습니다! 마크 업에서 비디오 요소를 제거하지 않고 video-js 플레이어를 제거하는 방법 (브라우저의 기본 HTML5 플레이어를 통해 계속 재생할 수 있음) – smohadjer

+0

IE8의 더 나은 지원을 위해 구형 버전을 사용하고 있기 때문에이 기능이 저에게 효과적이었습니다. 이전 버전에서는 destroy()를 사용하지만, 최신 버전에서는 dispose()를 사용하지만 내부 차이점은 확실하지 않습니다. – danjah

0

API가) (당신이 .dispose입니다 찾고 참조; 그러나 dom에서 설정을 제거하지는 않습니다. 타사 플러그인이있는 경우 처분을 실행 한 후 다른 항목이 DOM을 처분 할 수 있습니다. 같은 코드를 사용 폐기 실행하고 DOM을 정리하려면이

`dispose = function() { 
if (settings.debug) { 
    console.info('place.videojs_element.dispose()'); 
} /*Target the Player Element*/ 
var player = videojs(settings.element.id + '_player'); /*Pause Video*/ 
player.pause(); /*Wait for third party scripts to stop listening!!! <-- Important*/ 
setTimeout(function() { /*Dispose of the player*/ 
    player.dispose(); 
    /*I have a new video element waiting to be placed (this code is proprietary)*/ 
    var epi = new EPI(); 
    epi.place.videojs_element(settings, data); /*Wait time 600ms*/ 
}, 600); /*Destroy the old video element <--- Important */ 
$('#' + settings.element.id).empty(); 

}`

작업에 작업 예제를 참조하십시오 : http://codepen.io/JaminQuimby/pen/yNaOwz/

가 위의 당신에게 깨끗한 DOM을 줄 것이다 완전히 제거를 비디오 플레이어.

5

Video.js 5.0.0의 소스를 살펴 보았습니다. @l : 17236 다음을 수행하면됩니다.

if(videojs.getPlayers()[id]) { 
    delete videojs.getPlayers()[id]; 
} 
+0

절대적인 영웅! –

관련 문제