Подтвердить что ты не робот

Почему 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"); });
4b9b3361

Ответ 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"]
}