2012-12-19 26 views
0

這顯然與popup.html打開無限數量的選項卡。如何更改它,以便只打開一個選項卡。popup.html中的chrome.tabs.create打開無限數量的選項卡。如何打開一個標籤?

chrome.tabs.create({'url': chrome.extension.getURL('popup.html')}, function(tab) { 
     // Tab opened. 

    }); 

編輯:(A基本popup.html)

<!DOCTYPE html> 
    <html lang="en"> 


    <!--<script src="script.js"></script>--> 
    <script src="jquery.min.js"></script> 
    <script src="popup.js"></script> 
     <head> 
      <meta charset="utf-8"> 
      <title> Chrome Extension</title> 
      <!--<link rel="stylesheet" href="style.css" />--> 
     </head> 
     <body id="container"> 
     <div id="left"> 
      <div class="input-wrapper"> 

     hello 

      </div> 


    </div> <!-- end #left --> 
     </body> 
    </html> 

popup.js

function openTab() 
{ 
    filename = "popup.html" 

    var myid = chrome.i18n.getMessage("@@extension_id"); 
    chrome.windows.getCurrent(
    function(win) 
    { 
    chrome.tabs.query({'windowId': win.id}, 
    function(tabArray) 
    { 
     for(var i in tabArray) 
     { 
     if(tabArray[i].url == "chrome-extension://" + myid + "/" + filename) 
     { 
      // console.log("already opened"); 
      chrome.tabs.update(tabArray[i].id, {active: true}); 
      return; 
     } 
     } 
     chrome.tabs.create({url:chrome.extension.getURL(filename)}); 
    }); 
    }); 
} 

openTab(); 

的manifest.json:

{ 
    "name": "App", 
    "version": "1.1", 
    "manifest_version": 2, 
    "description": "Test", 
    "background_page": "background.html", 
    "browser_action": { 
    "name": "App", 
    "icons": ["icon.png"], 
    "default_icon": "icon.png", 
    "default_popup":"popup.html" 
    }, 
    "content_scripts": [ { 
    "js": [ "jquery.min.js", "background.js" ], 
    "matches": [ "http://*/*", "https://*/*"] 
    }], 
    "permissions": [ "<all_urls>", 
        "storage", 
        "tabs", 
       "contextMenus" ] 


} 
+0

爲什麼不來定義背景頁的變量應該存儲在彈出的標籤ID,如果它已經打開?否則,您應該使用'query'枚舉現有選項卡,並且只有在找不到必需的選項卡時才創建一個新選項卡。 – Stan

+0

如果你手動處理彈出,你應該從清單中刪除'popup.html'。你也從自己打開相同的頁面;-)。 – Stan

+0

是的,我有點理解這個問題。在manifest.json中應該有什麼,然後刪除popup.html也不會使它工作。 – Hick

回答

1

這裏是searhing的一個例子爲特定標籤。如果選項卡不存在,那麼該功能將打開它,否則現有的選項卡將被激活。

function openTab(filename) 
{ 
    var myid = chrome.i18n.getMessage("@@extension_id"); 
    chrome.windows.getCurrent(
    function(win) 
    { 
    chrome.tabs.query({'windowId': win.id}, 
    function(tabArray) 
    { 
     for(var i in tabArray) 
     { 
     if(tabArray[i].url == "chrome-extension://" + myid + "/" + filename) 
     { 
      // console.log("already opened"); 
      chrome.tabs.update(tabArray[i].id, {active: true}); 
      return; 
     } 
     } 
     chrome.tabs.create({url:chrome.extension.getURL(filename)}); 
    }); 
    }); 
} 

或者可以將其在後臺頁面創建(類似下面草案)中存儲新的標籤ID,當標籤被關閉(通過chrome.tabs.onRemoved.addListener手段)清理變量。

if(chrome.extension.getBackgroundPage().savedTabId != undefined) 
{ 
    chrome.tabs.create({url:chrome.extension.getURL(filename)}, 
    function(tab){ 
    chrome.extension.getBackgroundPage().savedTabId = tab.id; 
    }); 
} 
+0

曾嘗試過你的第一種方法。奇怪的是,即使是現在,它只是在擴展本身打開彈出窗口,而不是在新的選項卡中。 – Hick

+0

@Puck,奇怪,它適用於我的擴展。 – Stan

+0

if(tabArray [i] .url ==「chrome-extension://」+ myid +「/」filename)我在該行中得到一個奇怪的未捕獲標識符錯誤。任何想法爲什麼? – Hick

相關問題