2016-03-07 135 views
2

假設Firefox瀏覽器窗口中有10個選項卡。通過Firefox擴展在特定位置打開選項卡

如何通過Firefox擴展代碼在第二個選項卡後面添加選項卡?

gBrowser.addTab方法只附加到選項卡列表。

+0

從的[文件](https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Method/addTab),我不認爲你可以看起來。 'addTab'只允許使用'URL','referrerURI','charset','postData','owner'和'allowThirdPartyFixup'作爲參數,這些參數都不影響位置。 – GAntoine

回答

3

有沒有簡單的,直接做你想做的事情的方式。如果你真的想要打開一個標籤直接在一個特定的索引,那麼你可以看看code forgBrowser.addTab()code forgBrowser.moveTabTo();複製它們並修改它們以做你想做的事。請注意,此代碼是JavaScript的XML表示形式。因此,如果你想使用它,你需要重新格式化它。

但是,簡單這樣做的方法是打開標籤gBrowser.addTab()。然後,將其移動到您想要的索引,gBrowser.moveTabTo()

下面的代碼將做你想做的。當我將此代碼附加到按鈕上時,該選項卡在視覺上似乎在指定的索引處打開。它沒有而是首先在標籤的末尾打開,然後出現移動。這樣做沒有用戶明顯的區別,添加然後移動,而不是實際上在指定的索引添加選項卡。

function handleButtonCommandEvent(event) { 
    let window = event.view; 

    //Create the window variable if it does not exist. It should 
    // already be defined from event.view. 
    // This should work from any Firefox context. 
    if (typeof window === "undefined") { 
     //If there is no window defined, get the most recent. 
     var window=Components.classes["@mozilla.org/appshell/window-mediator;1"] 
          .getService(Components.interfaces.nsIWindowMediator) 
          .getMostRecentWindow("navigator:browser"); 
    } 

    //Test addTabAtIndex() 
    addTabAtIndexInWindow(window, 2, "http://www.ebay.com/") 
} 

/** 
* Open a tab in specified window at index. 
*/ 
function addTabAtIndexInWindow(window, index, URL, referrerURI, charset, postData, 
         owner, allowThirdPartyFixup) { 

    //Get the gBrowser for the specified window 
    let winGBrowser = window.gBrowser; 

    //Open a new tab: 
    let newTab = winGBrowser.addTab(URL, referrerURI, charset, postData, 
            owner, allowThirdPartyFixup); 
    //Immediately move it to the index desired: 
    winGBrowser.moveTabTo(newTab,index); 

} 
+0

謝謝@Makyen,作品非常棒。 –

+1

@JohnSewell,我更新了代碼,使其具有在指定窗口中的索引處添加選項卡的通用函數。 – Makyen

+0

看起來不錯。謝謝。 –

相關問題