Запускать скрипт каждый раз, когда нажимается значок расширения Chrome - PullRequest
56 голосов
/ 24 августа 2011

Как мне написать расширение chrome, чтобы каждый раз, когда пользователь нажимал на иконку, мой скрипт запускался, но не открывалось всплывающее окно?(Я сам посмотрел бы это в документах, но по какой-то причине они внезапно перестали работать, 404 просматривая каждую страницу, как я дошел до этого пункта).Вот что у меня сейчас:

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

Ответы [ 5 ]

80 голосов
/ 24 августа 2011

Удалите всплывающее окно из секции browser_action манифеста и используйте фоновые страницы вместе с Действие браузера в фоновом скрипте.

chrome.browserAction.onClicked.addListener(function(tab) { alert('icon clicked')});
46 голосов
/ 01 января 2016

Во-первых, если вы не хотите показывать всплывающее окно, удалите "popup" : "mine.html" из вашего manifest.json (показано в вашем вопросе).

Ваш 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 - это место, куда вы должны поместитькод, который вы хотите выполнить при нажатии значка.

5 голосов
/ 24 августа 2011

Вместо указания всплывающей страницы используйте API chrome.browserAction.onClicked, задокументированный здесь .

0 голосов
/ 28 марта 2018

вам нужно добавить фоновый файл. но сначала нужно добавить атрибут в manifest.json, например,

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

теперь назовите файл в вашей папке расширения как background.js есть способ отправки объектов из фона в ваши скрипты контента, предположим, что ваш скрипт контента называется content.js, тогда вам нужно написать этот фрагмент кода в файле background.js

chrome.browserAction.onClicked.addListener(sendfunc);
function sendfunc(tab){
msg={txtt:"execute"};
chrome.tabs.sendMessage(tab.id,msg);
}

то, что делает приведенный выше код, отправляет объект с именем msg на страницу контента, и этот объект msg имеет свойство txtt, которое равно «execute». то, что вам нужно сделать, это сравнить значения в скрипте содержимого как

chrome.runtime.onMessage.addListener(recievefunc);
function receivefunc(mssg,sender,sendResponse){
if(mssg.txtt==="execute"){



/*  
your code of content script
goes here
*/



}
}

теперь, когда вы щелкаете по значку расширения, объект с именем msg отправляется из фона в контент. функция «recievefunc ()» будет сравнивать свое свойство txtt со строкой «execute», если она будет соответствовать остальной части кода.

примечание: msg, txtt, sendfunc, receivefunc, mssg - все это переменные, а не ключевые слова chrome, поэтому вы можете использовать все, что захотите.

надеюсь, это поможет.

:)

0 голосов
/ 30 декабря 2017

Это было именно то, что мне было нужно, но я должен добавить это: Если все, что вам нужно, это одноразовое событие, например, когда пользователь нажимает на значок расширения, тогда Фоновые страницы - пустая трата ресурсов, поскольку они будут работать в фоновом режиме ВСЕ время. Вместо этого используйте страницы событий:

"background": {
    "scripts": ["script.js"],
    "persistent": false
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...