等待eventlisteners在调用事件

时间:2017-07-18 12:59:12

标签: javascript jquery google-chrome-extension javascript-events event-listener

我见过许多类似的问题,但实际上没有人回答我的问题。我认为这很简单,但我想这不是因为JS是单线程的。

基本上,我想从一个html元素中提取信息,该元素通过eventlistener插入,等待点击特定的html元素。使用jQuery看起来像这样:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendBack) {
        $(".clickme").click(); // Invoke 
        var result = $("#main-text").attr("src"); // Exists only when ".clickme" was clicked
        sendBack(result);
});  

上述代码存在的问题是#main-text仅在.clickme s click的特定事件监听器后才存在。登记/> 并且在我为其分配result值之前,不会执行eventlisteners 我如何等待事件监听器完成?

1 个答案:

答案 0 :(得分:2)

如果不知道要更改属性需要多长时间,我会使用MutationObserver:

chrome.runtime.onMessage.addListener(function(request, sender, sendBack) {
  $(".clickme").click();

  var target = $("#main-text")[0];
  new MutationObserver(function(mutations, observer) {
    if (target.src) {
      sendBack(target.src);
      observer.disconnect();
    }
  }).observe(target, {
    attributes: true,
    attributeFilter: ['src'],
  });

  // keep the message channel open while waiting
  return true;
});  

否则一个简单的setTimeout就可以解决这个问题 只是不要忘记return true以保持频道畅通。