0

多くの同様の質問がありましたが、実際に私の問題に答えたことはありません。私はそれがシンプルだろうと思うだろうが、私はそれがJSがシングルスレッドなのでではないと思う。イベントを呼び出すとイベントリスナーが終了するのを待ちます。

基本的に、特定のhtml要素のクリックを待っているイベントリスナーから挿入されている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.clickmeclick -eventの特定のイベントリスナが実行された後にのみ存在するということです。
resultに値を割り当てる前に、イベントリスナーは実行されません。
イベントリスナーの終了を待つ方法を教えてください。それが変更する属性のためにかかることがありますどのくらいの期間は不明だ場合

答えて

1

、私は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を忘れないでください。

関連する問題