How do I make page_action appear for specific pages?

前端 未结 2 1127
感动是毒
感动是毒 2020-12-15 20:16

I was playing around with some chrome extensions and I found this example:http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/pageActi

相关标签:
2条回答
  • 2020-12-15 20:47

    http://code.google.com/chrome/extensions/pageAction.html
    ...says...

    By default, a page action is hidden. When you show it, you specify the tab in which the icon should appear. The icon remains visible until the tab is closed or starts displaying a different URL (because the user clicks a link, for example).

    So even if your tabid was valid it would dissapear pretty quick as your only running chrome.pageAction.show(tabId); once when the background page first gets run.
    You need to check for changes to tabs in the background constantly because pageactions dont have matches/exclude_matches settings in the manifest like content scripts do (pity). So you have to check yourself and respond to changes.
    If you want it to work for a specific site just change it to something like...

    // 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);
    
    0 讨论(0)
  • 2020-12-15 20:59

    For those looking for a way to handle subdomains, if you have a site with a subdomain such as blog.specificsite.com, or need to use wildcards, you can also use regex in this format

    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);
    

    to match the substring within the URL. It also helps with computation to do a null/undefined check to avoid additional exception handling.

    0 讨论(0)
提交回复
热议问题