2011-01-31 34 views
1

私は小さなChromeの拡張機能 を書いていますし、私のbackground.htmlに私が持っている以下:Chromeの拡張機能 - 奇妙な実行順序

<script type="text/javascript" src="jquery.js"></script> 
<script> 

    var hash = ''; 
    var tab_id = -1; 
    var block; 

    tab_id = get_tab_id(); 
    //no myurl page is opened 
    if(tab_id == -1) 
    { 
     chrome.tabs.create({'url': 'http://myurl', 'selected': false}); 
     tab_id = get_tab_id(); 
    } 


function get_tab_id() 
{ 
    var tab_id = -1; 

    //find the needed page and get id 
alert('ins0'); 
    // get the current window 
    chrome.windows.getCurrent(function(win) 
    { 
    alert('ins1'); 
     // get an array of the tabs in the window 
     chrome.tabs.getAllInWindow(win.id, function(tabs) 
     { 
    alert('ins2'); 
      for (i in tabs) // loop over the tabs 
      { 
    alert('ins3'); 
       // if the tab is not the selected one 
       if (tabs[i].url == 'http://myurl') 
       { 
    alert('ins4'); 
        //get tab id 
        tab_id = tabs[i].id; 
       } 
      } 
     }); 
    }); 
alert('ins5'); 
    alert('tab_id: ' + tab_id); 
alert('ins6'); 
    return tab_id; 
} 
</script> 

奇妙であること、私は延長起動すると - の順序をアラートは次のとおりです。

ins0 
ins5 
ins1 
tab_id: -1 
ins2 
ins3 
ins6 

コードの一部から他の部分にジャンプしているようです。 アイデア

+0

複数のタブを開いていないことを確認しようとしていますか?同じですか? –

+0

いいえ、タスクが異なっていました。私はすでにそれを修正しました。とにかくありがとう。 – Volder

答えて

2

Chrome API呼び出しは非同期であるため、順番に実行する場合はコールバックを使用する必要があります。あなたが必要とするすべては、その後、新たに作成されたタブのIDを取得する場合:

chrome.tabs.create({'url': 'http://myurl', 'selected': false}, function(tab){ 
    console.log("created tab:", tab.id); 
}); 

UPDATE

あなたget_tab_id()機能し、このようになります。

function get_tab_id(url, callback) 
{ 
    var id = -1; 

    chrome.tabs.getAllInWindow(null, function(tabs) 
    { 
     for (var i=0;i<tabs.length;i++) 
     { 
      if (tabs[i].url == url) 
      { 
       id = tabs[i].id; 
       break; 
      } 
     } 
     callback(id); 
    }); 
} 

は使用方法:

var tab_id = -1; 
get_tab_id('http://myurl', function(id){ 
    console.log(id); 
    if(id == -1) { 
     chrome.tabs.create({'url': 'http://myurl', 'selected': false}, function(tab){ 
      console.log("created tab:", tab.id); 
      tab_id = tab.id; 

      restOfCode(); 
     }); 
    } else { 
     tab_id = id; 
     restOfCode(); 
    } 
}); 

function restOfCode() { 
    //executed after tab is created/found 
} 
+0

新しいタブを作成する必要があります。そのようなタブが既に開かれていない場合に備えてです。そのため、私はすべてのタブを1つずつチェックしています。また、後続処理のために私のページのtab_idを取得する必要があります。 – Volder

+0

@Volder ok更新を参照してください。 – serg

+0

ご協力いただきありがとうございます。私はすでにコールバックを使用してその問題を修正しています。 Chrome拡張機能が非同期であるという情報は非常に役立ちました。 – Volder

関連する問題