2015-10-20 75 views
0

我正在研究一個Chrome擴展業務遊戲化系統,該系統跟蹤各種Web應用程序中的用戶,並跟蹤他們在應用程序內的進度以確定其工作場所中的用戶排名。JavaScript - 檢測單擊事件是否觸發了DOMNodeInserted事件

我知道你可以跟蹤創建的元素,使用類似:

window.addEventListener('DOMNodeInserted', function(e){ 
    console.log(e.target); 
}, false); 

但是,因爲這可能會非常慢(在複雜的網絡應用明顯滯後),我想,只能檢測到那些元素由於鼠標點擊而產生(例如在元素上)。

我只是測試這一點,在本地:在希望的事件將是相同的,或在檢查DOMNodeInserted事件

<!DOCTYPE html> 
<html> 
<body> 

    <div id="creator">Click me</div> 

    <script> 

     var click_event = 0; 

     function add_element(e) 
     { 
      console.log(e); 
      click_event = e; 
      var div = document.createElement('div'); 
      div.innerHTML = "created"; 
      document.body.appendChild(div); 
     } 

     function element_created(e) 
     { 
      console.log(e); 
      if(e == click_event) 
      { 
       console.log("SAME EVENT"); 
      } 
     } 

     document.getElementById('creator').addEventListener('click', add_element, false); 
     window.addEventListener('DOMNodeInserted', element_created, false); 

    </script> 

</body> 
</html> 

,我會找到提取原始點擊事件的一些方法插入事件的屬性。儘管如此,我沒有發現將它鏈接到click事件的插入事件的屬性中。

有什麼方法可以找到哪個事件使用JavaScript觸發DOMNodeInserted事件?

+0

,如果你在一個onClick監聽器添加的DOM插入的聽衆是什麼? – JNF

回答

0

當你從JavaScript插入元素,而只是基於事件「DOMNodeInserted」使用自定義的事件,它是不可能的,但你仍可以使用元素<div insertedwith="click">上的自定義屬性和"DOMNodeInserted"處理程序是否e.target有屬性。無論如何檢查的例子,希望會幫助你。

console.clear(); 
 
     function add_element_working(e) 
 
     { 
 
      var div = document.createElement('div'); 
 
      div.onload = function() { 
 
    console.log("Script loaded and ready"); 
 
}; 
 
      div.innerHTML = "This is tracked with custom event"; 
 
      
 
      event = document.createEvent("HTMLEvents"); 
 
    \t  event.initEvent("InsertedFromClick", true, true); 
 
      
 
      document.body.appendChild(div); 
 
      div.dispatchEvent(event); 
 
     } 
 

 
function add_element_notworking(e) 
 
     { 
 
      var div = document.createElement('div'); 
 
      div.innerHTML = "This is not tracked"; 
 
      document.body.appendChild(div); 
 
     } 
 

 
     function element_created(e) 
 
     { 
 
      console.log("Inserted element not knowing who trigered"); 
 
      console.log(e); 
 
      
 
     } 
 
\t \t 
 
\t  function element_created_custom(e) 
 
     { 
 
      console.log("Click inserted element traked"); 
 
      console.log(e); 
 
      
 
     } 
 

 
     document.getElementById('creator').addEventListener('click', add_element_working, false); 
 
document.getElementById('creator2').addEventListener('click', add_element_notworking, false); 
 
     
 
window.addEventListener('DOMNodeInserted', element_created, false); 
 

 

 
window.addEventListener('InsertedFromClick', element_created_custom, false);
<div id="creator">Click me to check that tracked</div> 
 
<div id="creator2">Click me to check that I'm not tracked</div> 
 
<div>HTML</div>