2015-10-20 76 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>