2009-06-14 4 views
1

Firefox内でタブの再利用に関するチュートリアルを行いましたが、今では拡張機能がうまく機能しています。しかし、私はまた、(いくつかのアプリケーション、スタートメニューなどから)外部から開いているタブを再利用する必要があります。これはどうすればいいですか?Firefox、TabOpenイベントなどでタブを再利用する

「について:ブランク」である私はTabOpenイベントのイベントリスナーを追加してみましたが、私は

event.target.linkedBrowser.currentURI.spec 

をログインしたときにそれが値です。私はアドレスバーに入力した実際のアドレス(新しいタブで自動的に開きます)または他のアプリケーションから開いているアドレスを期待していました。そのタブをすぐに閉じることができます。私は間違って何をしていますか?

ありがとうございます。


念のため、ここに新しいタブが延長

function openAndReuseOneTabPerURL(url) { 
    var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] 
        .getService(Components.interfaces.nsIWindowMediator); 
    var browserEnumerator = wm.getEnumerator("navigator:browser"); 

    // Check each browser instance for our URL 
    var found = false; 
    while (!found && browserEnumerator.hasMoreElements()) { 
    var browserWin = browserEnumerator.getNext(); 
    var tabbrowser = browserWin.getBrowser(); 

    // Check each tab of this browser instance 
    var numTabs = tabbrowser.browsers.length; 
    for(var index=0; index<numTabs; index++) { 
     var currentBrowser = tabbrowser.getBrowserAtIndex(index); 
     if (url == currentBrowser.currentURI.spec) { 

     // The URL is already opened. Select this tab. 
     tabbrowser.selectedTab = tabbrowser.mTabs[index]; 

     // Focus *this* browser-window 
     browserWin.focus(); 

     found = true; 
     break; 
     } 
    } 
    } 

    // Our URL isn't open. Open it now. 
    if (!found) { 
    var recentWindow = wm.getMostRecentWindow("navigator:browser"); 
    if (recentWindow) { 
     // Use an existing browser window 
     recentWindow.delayedOpenTab(url, null, null, null, null); 
    } 
    else { 
     // No browser windows are open, so open a new one. 
     window.open(url); 
    } 
    } 
} 

答えて

2

TabOpenイベントを受信すると、ページコンテンツがまだ読み込まれるのが早すぎます。ただし、TabOpenイベントを受け取ったら、loadまたはDOMContentLoadedのために登録する必要があります。そのイベントを受け取ったら、そのURIにアクセスできるはずです。

+0

ありがとう、私はそれが可能な解決策かもしれないと考えました。それは私が望んでいたものではありません。タブは短時間オープンしています(同じアドレスの別のタブが存在する場合は閉じた直前です)。 –

+0

かなり速くなければなりません。約:空白は非常に速く消え去るでしょう。スピードが気になる場合は、DOMContentLoadedを使用します。 – sdwilsh

+0

まさに私がやったことだが、それでも短い時間でそのタブを見ることができる。私が本当に必要とするのは、 "PreTabOpen"イベントのようなものです(私はそれができる方法について別のアドバイスを得ましたので、ここでもっと助けを求める前にそれを試してみます)。 –

0

から要求されたとき、私はあなたがTab Mix Plus延長での実装から望ましい動作を抽出ことができると思いタブを再利用するコードです

関連する問題