2011-08-23 49 views
44

如何編寫一個Chrome擴展程序,以便每次用戶單擊圖標時,腳本都會運行但未打開彈出窗口? (我會自己查看這些文檔,但是無論出於何種原因,他們突然停止了工作,因爲我已經到了這一點)。每次點擊Chrome擴展程序圖標時都要運行腳本

我假設它只是正確設置清單。這是我現在有:

{ 
    "name": "My Extension", 
    "version": "0.1", 
    "description": "Does some simple stuff", 
    "browser_action": { 
    "popup" : "mine.html", 
    "default_icon": "logo.png" 
    }, 
    "permissions": [ 
    "notifications" 
    ] 
} 

回答

57

彈出刪除從清單中您browser_action節並用background pages在後臺腳本browser Action一起。

chrome.browserAction.onClicked.addListener(function(tab) { alert('icon clicked')}); 
+7

我到底在哪裏放這個。如果沒有mine.html,擴展名中的唯一文件是清單...以及圖標。 – Endophage

+2

查看後臺頁面 - http://code.google.com/chrome/extensions/background_pages.html。這就是你放置長期運行的代碼和跨不同頁面通用的代碼的地方。以上文檔的鏈接以browserAction.onClicked – arunkumar

+0

爲例。我最初嘗試了一個背景頁面,但沒有意識到browserAction.onClicked。 – Endophage

4

除了指定的彈出頁面,使用chrome.browserAction.onClicked API,記錄here

32

首先,如果您不想顯示彈出窗口,請從manifest.json(顯示在您的問題中)中刪除"popup" : "mine.html"

manifest.json會是這個樣子:

{ 
    "name": "My Extension", 
    "version": "0.1", 
    "manifest_version" : 2, 
    "description": "Does some simple stuff", 
    "background" : { 
    "scripts" : ["background.js"] 
    }, 
    "browser_action": { 
    "default_icon": "logo .png" 
    }, 
    "permissions": ["activeTab"] 
} 
  • 注意manifest_version必須在那裏,它必須是2
  • 請注意,已添加activeTab權限。
  • 請注意,只有在單擊瀏覽器操作按鈕時才能執行一項操作:可以顯示彈出窗口,也可以執行腳本,但不能同時執行這兩個操作。

其次,執行單擊該圖標時,一個腳本,將下面的代碼在你的background.js文件(文件名是在您的manifest.json指定):

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(null, {file: "testScript.js"}); 
}); 

最後,testScript.js是你應該把你想要執行的代碼放到圖標被點擊時。

+1

正確工作的唯一方法。謝謝 – myh34d

+3

從2017年2月起,這個解決方案完全實現了原始問題中提出的問題。 – mjamore

+0

如何將選項卡信息傳遞給「testScript.js」? – kerzek

0

這就是我所需要的,但我應該補充一點: 如果您只需要一次性事件,就像用戶點擊擴展程序的圖標時一樣,那麼背景頁面會浪費資源,因爲它會運行所有的時間背景。 改爲使用事件頁面:

"background": { 
     "scripts": ["script.js"], 
     "persistent": false 
     } 
相關問題