2016-05-17 63 views
0

以下工作正常。我点击#testlink,它会触发。jQuery dispatchEvent不会在DOM负载上触发

jQuery(document).ready(function() { 
    jQuery("#testlink").on("click", function(event) { 
     document.dispatchEvent(new CustomEvent('funcTest', { 
      'detail': { 
       test: 'stuff' 
      } 
     })); 
    }); 
}); 

现在我想做同样的事情,没有on.click,我希望它在网页加载时触发。所以删除onclick。

jQuery(document).ready(function() { 
    document.dispatchEvent(new CustomEvent('funcTest', { 
     'detail': { 
      test: 'stuff' 
     } 
    })); 
}); 

但它不起作用。什么都没发生。为什么?如何在页面加载时触发它?

+0

该代码应该工作:https://jsfiddle.net/a87umsjh/是否在'dispatchEvent'调用之前分配了'funcTest'的事件处理程序? – Andreas

+0

是的,我认为这就是发生的事情。 funcTest实际上是一个content.js,它是Chrome扩展的一部分。它在不同的沙箱中。所以它必须被分配得太晚?我将如何解决这个问题?我会尝试一个我认为很愚蠢的setTimeout。 –

+0

雅,它与setTimeout一起工作。即使超时时间像2或10那样超级低,但只要我将超时注释掉,它就不会再触发了。我认为setTimeout是丑陋的。必须有更好的方法来调用funcTest而不必等待。 –

回答

0

出于某种原因在清单中添加“run_at”:“document_start”会使内容脚本加载速度更快。