2011-01-03 41 views
0

ウェブページA(現在のウェブページ)から情報を取得し、タブをウェブページBに更新してコードを注入する小さなクロムエクステンションを作成したいchrome.tabs chrome.tabs.updateとchrome.tabs.executeScriptの問題

chrome.tabs.update(tab.id,{url: "http://B.com"}); 
chrome.tabs.executeScript(tab.id, {file: "inject_into_B.com.js"}); /* injections goes misleadingly to webpage A*/ 

答えて

1

chrome.tabs.updateので(ほとんどすべての他のもののような)非同期呼び出し、次のとおりです。background.htmlでコードがWebページBにunfortunaetelly次のコードでは、BにWebページを更新しているが、WebページAにコードを注入しますこれらのコマンドを実行して、コールバック関数を使用する必要がある場合:

chrome.tabs.update(tab.id,{url: "http://B.com"}, function(tab) { 
    chrome.tabs.executeScript(tab.id, {file: "inject_into_B.com.js"}); 
}); 
+0

をA:したがって、呼び出しがまだ非同期であると言うことができます:/ – dayscott

3

あなたはこのような何かしたい:私はinject_into_B.com.jsの終わり(「完了」)コードの警告を追加した場合、私は警告がWebページで焼成される(も、あなたのコードを持つ)ことがわかり

chrome.tabs.update(tab.id, {url: request.url, active: true}, function(tab1) { 

    // add listener so callback executes only if page loaded. otherwise calls instantly 
    var listener = function(tabId, changeInfo, tab) { 

     if (tabId == tab1.id && changeInfo.status === 'complete') { 
      // remove listener, so only run once 
      chrome.tabs.onUpdated.removeListener(listener); 
      // do stuff 
     } 
    } 
    chrome.tabs.onUpdated.addListener(listener); 
}); 
+0

これは私のために働いていましたが、ここではsergの答えはありませんでした。奇妙なことに、私はsergが提案していた方法を使っていましたが、これはうまくいきましたが、それはもはや働いていないことに気付きました。それを修正しようとすると、私はあなたの解決策がそうしたことを発見しました。 – JeffG

関連する問題