Почему chrome.browserAction.onClicked undefined?
Я пишу расширение Chrome, которое перенаправляет меня на URL-адрес при нажатии на значок действия браузера.
Я пытаюсь использовать:
chrome.browserAction.onClicked.addListener
но я получаю
Uncaught TypeError: невозможно прочитать свойство "onClicked" из 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"); });
Ответы
Ответ 1
Кажется, что код находится в вашем файле twterland.js
, который является вашим контентом script. browserAction
может использоваться только на дополнительных страницах, поэтому вы не можете использовать его в сценариях контента.
Документ: https://developer.chrome.com/extensions/content_scripts
Однако сценарии содержимого имеют некоторые ограничения. Они не могут:
- Использовать хром. * API (за исключением частей chrome.extension)
- Используйте переменные или функции, определенные их страницами расширения
- Использовать переменные или функции, определенные веб-страницами или другими сценариями контента.
Поместите его на
Ответ 2
Для тех, кто уже добавил что-то вроде
"background": {
"scripts": ["background.js"]
}
и до сих пор получает Cannot read property 'onClicked' of undefined
- просто добавьте
"browser_action": {}
в ваш манифест .json
редактировать: спасибо @Pacerier за его комментарий, я изменил свой ответ
Ответ 3
Если у вас нет свойства "browser_action"
, указанного в вашем manifest.json
, эта ошибка может возникнуть. Ответ @Kirill работает, но вам также нужно добавить пустой файл icon.png
, иначе chrome выдаст ошибку, чтобы он не смог найти такой файл.
Добавление этого в файл manifest.json
должно подавлять ошибку:
"browser_action": {}
Обязательно прочитайте документацию для дополнительной справки о том, как использовать параметр "browser_action"
.
Ответ 4
Я тоже получал это, добавляя
"persistent": true
чтобы мое фоновое объявление в manifest.json решило его.
Ответ 5
Убедитесь, что у нас нет jquery.js перед background.js в массиве scripts фона в manifest.json.
"background": {
"scripts": ["background.js","jquery.js"]
}