Как мне сделать page_action для определенных страниц? - PullRequest
16 голосов
/ 12 февраля 2012

Я играл с некоторыми расширениями Chrome и нашел этот пример: http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_url/

Все работает нормально, но я хочу создать собственное расширение и увидеть иконку page_action на определенном сайте, а не на иконке с буквой "g" в URL. Поэтому я попытался просто изменить сценарий из этого:

// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Called when the url of a tab changes.
function checkForValidUrl(tabId, changeInfo, tab) {
// If the letter 'g' is found in the tab's URL...
if (tab.url.indexOf('g') > -1) {
// ... show the page action.
chrome.pageAction.show(tabId);
}
};

// Listen for any changes to the URL of any tab.
chrome.tabs.onUpdated.addListener(checkForValidUrl);

В это:

chrome.pageAction.show(tabId);

Но теперь это не работает ... Я не понимаю Очевидно, я могу использовать обходной путь, но это не главное ... Прежде всего, я должен создать фоновую страницу для этого? Я думаю, что да, но я не понимаю, почему и почему метод .show не работает один? Я попытался выполнить поиск в документации и прочем Google, но не смог найти ничего полезного. Я не эксперт, и это был мой первый день, потраченный на расширение Google, но откуда мне знать, что "chrome.page.show ( tabId) "должен идти на фоновой странице, если она нигде не написана? Нет намерений критиковать, но как, черт возьми, вы узнали, ребята? Все методы Chrome должны идти на фоновой странице? Ну, определенно гораздо больше вопросов, чем то, что законно. Надеюсь, вы сможете дать мне хотя бы один ответ!

Ответы [ 2 ]

29 голосов
/ 12 февраля 2012

http://code.google.com/chrome/extensions/pageAction.html
... говорит ...

По умолчанию действие страницы скрыто.Когда вы показываете это, вы указываете вкладку, на которой должен появиться значок.Значок остается видимым до тех пор, пока вкладка не будет закрыта или не начнет отображаться другой URL-адрес (например, если пользователь щелкает ссылку).

Так что даже если ваш табид действителен, он исчезнет довольно быстро, так как вашзапускается chrome.pageAction.show(tabId); только один раз, когда запускается фоновая страница.
Вам необходимо постоянно проверять изменения вкладок в фоновом режиме, потому что в действиях страниц нет манипуляций с совпадающими / исключающими параметрами в манифесте, как это делают скрипты содержимого (жалко).Поэтому вы должны проверить себя и отреагировать на изменения.
Если вы хотите, чтобы он работал для определенного сайта, просто измените его на что-то вроде ...

// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Called when the url of a tab changes.
function checkForValidUrl(tabId, changeInfo, tab) {
    // If the tabs url starts with "http://specificsite.com"...
    if (tab.url.indexOf('http://specificsite.com') == 0) {
        // ... show the page action.
        chrome.pageAction.show(tabId);
    }
};

// Listen for any changes to the URL of any tab.
chrome.tabs.onUpdated.addListener(checkForValidUrl);
2 голосов
/ 17 марта 2017

Для тех, кто ищет способ обработки поддоменов, если у вас есть сайт с таким поддоменом, как blog.specificsite.com , или вам необходимо использовать символы подстановки, вы также можете использовать регулярные выражения в этом формате

function checkForValidUrl(tabId, changeInfo, tab) 
{
    if(typeof tab != "undefined" && typeof tab != "null" )
    {
        // If the tabs URL contains "specificsite.com"...
        //This would work in the same way as *specificsite.com*, with 0 or more characters surrounding the URL.
        if (/specificsite[.]com/.test(tab.url)) 
        {
            // ... show the page action.
            chrome.pageAction.show(tabId);
        }
    }
};

// Listen for any changes to the URL of any tab.
chrome.tabs.onUpdated.addListener(checkForValidUrl);

для соответствия подстроки в URL. Это также помогает в вычислениях выполнять нулевую / неопределенную проверку, чтобы избежать дополнительной обработки исключений.

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