2016-10-26 69 views
1

background.js:chrome.pageAction.show()不tabs.onCreated監聽工作

chrome.tabs.onCreated.addListener(function(tab) { 

    chrome.pageAction.show(tab.id);//Doesn't work...icon is still grey 

}); 

這是從我的擴展代碼的一部分。我希望每一個新選項卡在創建時都顯示頁面操作。不幸的是,chrome.pageAction.show()不起作用。每次我創建一個新選項卡時,其圖標都會變灰。

但令我驚訝的是,如果我從控制檯撥打電話chrome.pageAction.show(),它完美的工作。

manifest.json的

{ 
    "name": "show Page Action", 
    "description": "show icon in all tabs", 
    "version": "1.0", 
    "background": { 
    "scripts": ["jquery-3.1.1.min.js", "background.js"] 
    }, 
    "page_action": { 
    "default_icon": "icon_true.png" 
    }, 
    "manifest_version": 2 
} 

回答

1

pageAction API是基於URL的,所以你需要使用tabs.onUpdated,這是onCreated後執行,並有不同的參數:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    if (changeInfo.url) { 
     chrome.pageAction.show(tabId); 
    } 
}); 

別t忘記在manifest.json's "permissions"中添加"tabs"

+0

Thanks.Can you can詳細說明爲什麼onCreated不起作用? – SKG

+2

選項卡在onCreated事件中尚未有URL,因爲選項卡未綁定到某個URL,它稍後開始加載並在onUpdated事件中進行報告。而且由於pageAction API是基於URL的設計,所以只有在標籤URL已知的情況下才會初始化,即在包含'url'的changeInfo'的onUpdated事件中進行初始化。 – wOxxOm