Расширение Chrome: заставить мое расширение работать только при нажатии всплывающего окна и отображать результаты во всплывающем окне - PullRequest
1 голос
/ 18 мая 2011

Как ясно видно,

Я хочу, чтобы мое всплывающее окно было триггером для запуска расширения. Мое расширение в принципе может быть выполнено полностью в background.html. Background.html требуется некоторая информация с веб-страницы, поэтому используйте передачу сообщений для передачи необходимого контента от contentscript.js до background.html. Это становится ресурсоемким для запуска на всех страницах, поэтому я хочу, чтобы это расширение запускалось только после нажатия значка и отображения информации в popup.html, которую я могу напрямую извлечь из background.html.

Дай мне знать, если я неясен.

1 Ответ

1 голос
/ 18 мая 2011

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

Вторая часть будет заключаться в вводе скрипта контента по требованию (насколько я понимаю, в текущую вкладку).

Таким образом, вся структура расширения должна выглядеть примерно так:

popup.html

//this will run each time popup opens
chrome.extension.sendRequest("start", function(data) {
    //display data received from background page through content script
});

background.html

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request == "start") {
        chrome.tabs.getSelected(null, function(tab) {
            chrome.tabs.executeScript(tab.id, {file: "contentscript.js"}, function() {
                //content script is injected, send a request to it
                chrome.tabs.sendRequest(tab.id, "get_data", function(data){
                    //content script sent response back with data we need to display in popup
                    sendResponse(data);
                });
            });
        });
    }
}));

Следует иметь в виду, что к моменту получения данных всплывающее окно может быть уже закрыто, поэтому может потребоваться добавить обработку ошибок.

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

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