Chrome Расширение отображает контекстное меню с левой кнопкой мыши без всплывающего окна - PullRequest
0 голосов
/ 07 апреля 2020

Просто начинаю учиться писать расширение Chrome. Моя цель - писать в консоль из фона js при нажатии на значок панели инструментов.

Мое понимание из прочитанных мною учебников состоит в том, что, если всплывающее окно не указано, значок будет действовать как кнопка, а при щелчке левой кнопкой мыши вызывается обратный вызов onClicked. Вместо этого на самом деле происходит щелчок левой кнопкой мыши по контекстному меню по умолчанию; обратный вызов никогда не вызывается - вероятно, по этой причине.

Я уверен, что мне не хватает чего-то очень простого; было бы очень полезно, если бы кто-то мог указать на это. Для записи я использую Chrome версию 80.0.3987.163 на Ма c.

Спасибо всем заранее.

Манифест:

{
    "name": "Test",
    "version": "1.0",
    "description": "",

    "manifest_version": 2,

    "permissions": ["declarativeContent"],

    "page_action": {
        "default_icon": {
          "16": "images/get_started16.png",
          "32": "images/get_started32.png",
          "48": "images/get_started48.png",
          "128": "images/get_started128.png"
        }
    },

    "icons": {
        "16": "images/get_started16.png",
        "32": "images/get_started32.png",
        "48": "images/get_started48.png",
        "128": "images/get_started128.png"
    },

    "content_scripts": [
        {
          "matches": ["*://*.reddit.com/r/*"],
          "js": ["content.js"]
        }
      ],

    "background": {
        "scripts": ["background.js"],
        "persistent": false
    }
}

содержание . js:

console.log("Content script running...");

фон. js:

console.log("Background script running...");

const iconRules = [{
    conditions: [
        new chrome.declarativeContent.PageStateMatcher({
            pageUrl: {hostEquals: 'reddit.com'},
        })
    ],
    actions: [new chrome.declarativeContent.ShowPageAction()]
}];

chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    chrome.declarativeContent.onPageChanged.addRules(iconRules);
});

chrome.pageAction.onClicked.addListener(function(){
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        console.log("Clicked!")
    })
});

При посещении reddit:

Показывает выделенный значок.

При щелчке левой кнопкой мыши по значку:

Отображается контекстное меню по умолчанию.

1 Ответ

0 голосов
/ 07 апреля 2020

После экспериментов я наконец понял, почему это не работает: pageURL не соответствует.

Фактический хост - www.reddit.com. Изменение hostEquals на hostSuffix остановлено Chrome из-за отображения контекстного меню ; Был вызван обратный вызов onClicked.

Я понятия не имею, почему Chrome даже активирует значок, когда условие не соответствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...