2015-02-09 23 views
0

我想通過使用Crossrider擴展來捕獲DOMsubtree修改的事件,但無法獲取它。無法捕捉DOMSubtree在YouTube上修改Crossrider擴展

我想在頁面加載上獲得一個YouTube視頻網址,直到這很好。但是,當我嘗試點擊YouTube右側文章中的視頻時,YouTube會進行Ajax類型的調用以獲取有關視頻,然後我無法從地址欄獲取點擊的視頻網址。

嘗試修改DOMsubtree。

$('body').on('DOMSubtreeModified',function(){ 
    console.log("something is changing"); 
}); 

一些技術人員建議YouTube使用Flash來加載視頻,而Jquery無法預測它們。任何建議

+2

我使用擴展中提供的代碼,我可以看到事件觸發時產生的日誌消息,即加載了AJAX。您是否已將代碼放入[appAPI.ready](http://docs.crossrider.com/#!/api/appAPI-method-ready)方法中的_extension.js_文件中?如果您可以提供擴展ID,並簡要說明您重現問題的步驟以及測試的瀏覽器/操作系統,我很樂意看看。 [**披露**:我是Crossrider員工] – Shlomo 2015-02-09 11:49:47

+0

對不起,不清楚。我得到它但很多次。我猜appAPI.ready正在觸發很多次。我可以知道爲什麼@Shlomo – saikiran 2015-02-09 12:56:52

+1

appAPI.ready被觸發一次,除非您打開了(**設置**>)**在Iframes **功能中運行,並且頁面中有iframe,這種情況下爲每個iframe運行一次。另外請記住,如果DOM子樹中有多個更新,則DOMSubtreeModified **事件可能會多次觸發,如果內容是通過AJAX加載的,則可能會觸發多次。 – Shlomo 2015-02-09 16:51:33

回答

0
var target = document.querySelector('#player-api'); 
     var observer = new MutationObserver(function(mutations) { 
     mutations.forEach(function(mutation) { 
      if(mutation.type=="attributes"){ 

      var url1=window.location.href; 
      $('#tubevid_div').remove(); 

       if(url1.indexOf('youtube.com/watch?v=')){ 
       InjectUtubeDownloadButton($,url1); 
       //observer.disconnect(); 
       } 
      } 

     });  
     }); 
    // configuration of the observer: 
    var config = {attributes: true}; 
    // pass in the target node, as well as the observer options 
    observer.observe(target, config); 

我在這裏觀察了Mozilla文檔的所有突變播放器的API DIV的改變而改變的回調將被觸發只有一次,我用這個注射用InjectUtubeDownloadButton()我的下載按鈕;