2012-07-15 163 views
22

我正在編寫一個Chrome擴展程序,當點擊瀏覽器操作圖標時,會將我重定向到一個URL。爲什麼chrome.browserAction.onClicked未定義?

我試圖使用方法:

chrome.browserAction.onClicked.addListener 

,但我得到

Uncaught TypeError: Cannot read property 'onClicked' of undefined

這是我的清單文件:

{ 
    "name": "first extension", 
    "version": "2.2.12", 
    "description": "redirct to a link icon", 
    "browser_action": { 
     "default_icon": "icontest.png", 
     "default_title": "Do action" 
    }, 
    "permissions": ["tabs", "http://*/*"], 
    "content_scripts": [{ 
     "matches": ["http://*.twitter.com/*", "https://*.twitter.com/*"], 
     "js": ["twterland.js"] 
    }], 
    "icons": { 
     "16": "icontest.png", 
     "48": "icontest.png", 
     "128": "icontest.png" 
    } 
} 

這是我的js文件:

chrome.browserAction.onClicked.addListener(function(tab) { alert("hi"); }); 

回答

15

看起來代碼在您的twterland.js文件中,這是您的內容腳本。 browserAction只能用於擴展頁面,因此您不能在內容腳本中使用它。

文件:https://developer.chrome.com/extensions/content_scripts

However, content scripts have some limitations. They cannot:
- Use chrome.* APIs (except for parts of chrome.extension)
- Use variables or functions defined by their extension's pages
- Use variables or functions defined by web pages or by other content scripts

把它放在background page代替。

25

對於那些誰已經補上一句

"background": { 
    "scripts": ["background.js"] 
} 

,並仍然得到Cannot read property 'onClicked' of undefined - 只需添加

"browser_action": { 
    "default_icon": "icon.png" 
} 

到您的manifest.json

+5

這很瘋狂,但它工作 – syonip 2016-08-15 07:31:04

+1

這實際上是我的問題。我的腳本已經是背景。這只是我從來沒有宣佈任何'browser_action'開始。 – 2017-02-11 07:32:15

+3

''browser_action「:{}'就夠了 – Pacerier 2017-08-07 15:34:17

7

如果沒有"browser_action"屬性在manifest.json中定義,則可能會發生此錯誤。 @ Kirill的答案有效,但你也必須添加一個空白的icon.png文件,否則chrome會拋出一個錯誤,它找不到這樣的文件。

添加此到manifest.json文件應該抑制,這是錯誤:

"browser_action": {} 

請務必閱讀關於如何使用"browser_action"設定​​。

+0

我有我的清單中定義的browser_action,仍然'chrome.pageAction'沒有在我的後臺腳本中定義 – 2018-01-08 19:54:29

+0

@AlexanderMills原始問題是關於'chrome.browserAction'所以我'我不確定'pageAction'。 – Sgnl 2018-01-08 20:15:35

+0

哦,我的不好,你說得對 – 2018-01-08 20:16:24

1

我也得到這個,添加

"persistent": true 

在manifest.json中我的背景聲明解決了這個問題。