Действие браузера Chrome не работает

Я пытаюсь создать расширение для Chrome, однако мое действие браузера не работает! Я пробовал почти все. Вот моя установка:

манифест.json:

{
"name": "blah",
"version": "1.0",
"description": "blah",
"browser_action": {
  "default_icon": "icon1.png",
  "popup": "popup.html"
 },  
"permissions": [
  "bookmarks",
  "tabs",
  "http://*/*", 
  "https://*/*"    
],
"background_page": "background.html"
}

всплывающее окно.html:

<html>
<head>
<script>
<!-- Try adding the listener in popup.html  -->
    chrome.browserAction.onClicked.addListener( function(tab){
    console.log("Hello from popup"); // This does not show up either
    } );
 </script>
</head><body>
 Hello
</body>
</html>

фон.html:

<html>
<head>
<script>
console.log("Background.html"); // This gets displayed. O.K.

function hello() {
  console.log("HELLO"); // THIS NEVER GETS DISPLAYED
}

// Supposed to Called when the user clicks on the browser action icon.
chrome.browserAction.onClicked.addListener(hello); 
</script>
</head>
</html>

Но сколько бы я ни нажимал на иконку, ничего не происходит, и в консоли не печатается «HELLO»!

Я использую Chrome 4.0.249.43. Я установил бета-версию, НО она точно такая же, как выпущенная версия (тот же номер версии). Может ли это быть проблемой?


person Andriy Drozdyuk    schedule 21.12.2009    source источник


Ответы (6)


У вас не может быть «всплывающего окна» с событием onclick. Удалите popup.html из файла манифеста. И сохраните фоновую страницу, и она будет работать.

person Mohamed Mansour    schedule 21.12.2009
comment
Это правильно. Всплывающее окно полностью исключает событие onclick! Мне понадобилось два дня, чтобы понять это. - person Andriy Drozdyuk; 21.12.2009
comment
Кто-нибудь из команды расширения Chrome когда-либо слышал о POLA? en.wikipedia.org/wiki/Principle_of_least_astonishment - person Pacerier; 06.08.2017
comment
Документация по расширению Chrome отстой - person Legends; 06.02.2018
comment
Кто-нибудь знает, есть ли обходной путь, чтобы всплывающее окно могло что-то сделать с текущей вкладкой? Например, я нажимаю значок всплывающего окна, выбираю цвет, и он меняет цвет фона текущей вкладки. - person Bufke; 10.02.2018

Вам нужно удалить popup.html, у вас уже есть всплывающее окно в popup.html, теоретически background.html должен выполнять событие для browserAction, но это неправильно. Когда вы щелкнули значок своего приложения, во всплывающем окне уже определена функция onClicked.

я не знаю, для чего вам нужно, но вы можете сделать много функций, когда вы нажимаете в браузере.

Например: в background.html выполните:

 foo(){
        if(browserAction && browserAction.onClicked) // you can add all stuff that you need.
        do something
    }

и вы звоните из popup.html с помощью chrome.extension.getBackgroundPage().foo();

хорошо, я надеюсь, что это поможет вам.

person exbios    schedule 19.07.2011

Я нашел основную причину своей проблемы в: - MDN

Действие браузера.onClicked: – Запускается при нажатии значка действия браузера. Это событие не сработает, если действие браузера содержит всплывающее окно.

удалил deafult_popup из manifest.json

"browser_action": {
    "default_icon": "img/icon.png",
    "default_popup": "popup.html"
  }
person user2235487    schedule 13.04.2019
comment
Они не могли задокументировать эту аккуратную маленькую деталь менее заметной ... - person ViRuSTriNiTy; 14.10.2020

У меня тоже были некоторые проблемы при попытке создать расширение для Chrome. Убедитесь, что вы перезагружаете расширение после любых изменений в manifest.json или фоновой странице. Чтобы перезагрузить его, перейдите на страницу расширений (гаечный ключ> инструменты> расширения) и выберите перезагрузить. Может проблема только в этом, в остальном все нормально.

person Maxime Kjaer    schedule 29.08.2011

Согласно документу:

chrome.browserAction.onClicked.addListener(function(Tab tab) {...});

so:

// Supposed to be called when the user clicks on the browser action icon.    
chrome.browserAction.onClicked.addListener(function(tab) {
    hello();
});

должно сработать

person Community    schedule 21.12.2009
comment
Поскольку он никогда не использовал и не вызывал tab и никогда не использовал контекст (this), это не имело бы никакого значения... - person K Prime; 21.12.2009

Вы уверены, что просматриваете правильную консоль JavaScript для фоновой страницы, а не для другой вкладки?

Попробуйте, чтобы ваш метод hello() установил глобальную переменную на фоновой странице, а затем с помощью кнопки в popup.html извлеките эту переменную (используя chrome.extension.getBackgroundPage()) и отобразите ее как предупреждение.

person dmazzoni    schedule 21.12.2009
comment
Привет, я отредактировал, чтобы показать, что я пытался добавить прослушиватель в popup.html, и он тоже не работает... - person Andriy Drozdyuk; 21.12.2009