それらは段階的に作成されますか?基本的には整数ですが、特定の方法で生成されているのではないかと思います。これを知っていると、私が書いているアプリケーションに役立ちます。
編集:IDをメモリに保持する必要があり、検索できるようにIDを注文できるかどうかを考えています。それらが増加する数で作成されている場合、バイナリ検索として検索を実装するのは簡単です、それが私が求めている理由です
それらは段階的に作成されますか?基本的には整数ですが、特定の方法で生成されているのではないかと思います。これを知っていると、私が書いているアプリケーションに役立ちます。
編集:IDをメモリに保持する必要があり、検索できるようにIDを注文できるかどうかを考えています。それらが増加する数で作成されている場合、バイナリ検索として検索を実装するのは簡単です、それが私が求めている理由です
IDに関連するドキュメントで私が見つけることができるのは、次の抜粋だけです。
id(整数)タブのID。タブIDは、ブラウザセッション内で一意です。
したがって、これから収集できるのは、2つのタブが同じセッションで同じIDを取得することは決してないということです。それらがどのように生成されるかについての情報はドキュメントにありません。
最終的に、この意味で予測的なアプローチはバグと失敗に運命づけられていると思います。予測的なアプリケーションではなく、応答性の高いアプリケーションを構築する必要があります。
次のタブがID#12で開かれると想定する代わりに、タブの作成をキャプチャすると、IDがわかり、それに基づいて操作を実行できます。
必要なのはですtab onCreated event
。タブが作成されると、tab
オブジェクトを取得します。このオブジェクトから取得しtabid
たりwindowid
、必要なアクションを実行したりできます。
あなたはあなたの最終的な目標についてあまり教えてくれなかったので、正しい方向にあなたを向ける以外にあなたを助けるための具体的な例/コードをあなたに与えることはできません。
コメントからの続き:
IDでタブを検索するだけの場合は、タブのメタデータをリストではなく辞書に保存する方が簡単ではないでしょうか。
var metadataRepository = {};
metadataRepository[tab.id] = tab.metadata;
それで:
var metadata = metadataRepository[tabId];
if (metadata) {
// Do Stuff
}
さらに詳しい情報:
私の現在のChrome(19.xxx ...)の時点で、V8エンジンはJavaScript1.6メソッドをサポートしています。Array.filter(...)
ここで、フィルターを使用して配列を検索し、反復ごとに型検査と文字列検索を実行することをシミュレートする小さなテストを行いました(これは一般的なことです)。
私のマシン(比較的新しい、i7-2600k)で10,000エントリを爆破するのに、25ミリ秒かかりました。これはコンパイルされた言語と比較して高速ではありませんが、100のタブを処理する場合は1ミリ秒未満になります。パフォーマンスについてあまり心配する必要はないと思います。
アプリが常にこれを検索している場合は、ローカルキャッシュまたは上記の辞書を検討してください。
すべてのタブを追跡して問題を解決するには、拡張コンテキストで配列を作成します。
window.CurrentTabs = {};
次に、すべてのアクティブなタブを追跡するために、削除と追加を接続するだけです。
chrome.tabs.onCreated.addListener(function(tab) { window.CurrentTabs[tab.id]=tab });
chrome.tabs.onRemoved.addListener(function(tabID){ delete window.CurrentTabs[tabID]; });
いくつかの言及:
chrome.tabs.query(...)
また、拡張機能のアクティブ化ポイントの前にタブが存在する理由はいくつかあるため、拡張機能の開始時に1回だけ実行する必要があります。
また、タブがウィンドウ間でドラッグされるなど、他のシナリオを調査する必要があります(実際に何が起こるかはわかりませんが、イベントハンドラーがあります)
はい、タブIDは増分ですが、「完全に」増分ではありません。呼び出しchrome.tabs.create()
て、タブIDが51
あり58
、範囲内に有効なタブがない場合があります52-57
。これがChromeの動作です。
検索機能には、これを使用するだけです
chrome.tabs.query({ /* EMPTY SEARCH PARAMETERS */ }, function(tabs){ /* DO WHAT YOU WANT HERE */ })