如何在地址栏中为Chrome扩展程序添加图标?

tru*_*ktr 7 google-chrome chromium google-chrome-extension

我不知道该怎么做,文档似乎没有让这个显而易见.

我尝试制作background_page并放入chrome.pageAction.show(tab.id);其中,但这似乎不起作用.

我不想使用该browser_action图标,因为该图标仅反映了插件的状态,但它不是用于执行任何操作的按钮.

如何在任何页面/标签的地址栏中添加page_action的图标?

编辑:这是我的manifest.json:

{
    "name": "My Very First Extension :D",
    "version": "0.0.1",
    "description": "Awesomeness",
    "background_page": "background.html",

    "page_action": {
        "default_icon": "icon.png"
    },

    "content_scripts": [{
        "matches": ["http://*/*", "https://*/*"],
        "js": ["mmm.js"]
    }]
}
Run Code Online (Sandbox Code Playgroud)

其中icon.png是一个19x19像素的PNG图形.这是background.html源代码,我正在尝试为所有选项卡显示page_action图标:

<!DOCTYPE html>
<html>
    <head>
        <script>
            chrome.pageAction.show(tab.id);
        </script>
    </head>
</html>
Run Code Online (Sandbox Code Playgroud)

Ste*_*ris 14

我看到你的代码有两个问题.

  1. 您不能在后台页面中使用内联脚本块 - js代码只能从链接脚本运行(如下所示:) <script type="text/javascript" src="background.js"></script>.这是因为内容安全策略.

  2. 正如亚伯拉罕的回答所述,由于您希望所有页面都显示图标,因此您应该使用browser_action,而不是page_action.根据Google的pageAction文档页面:

    不要将页面操作用于对大多数页面有意义的功能.请改用浏览器操作.

    页面操作的图标显示在omnibar(Chrome的地址栏)中,而浏览器操作的图标显示为omnibar旁边的工具栏按钮.可以用来反映插件的状态和操作按钮.

解决方案

要显示图标,您必须致电:chrome.pageAction.show(tabId).但是,您不能只从内容脚本调用它,因为chrome.pageAction.show()必须传递tabId,并且从chrome.tabs检索tabId,并且无法从内容脚本访问chrome.tabs.

要添加浏览器操作按钮并在单击时定义其行为,请在manifest.json文件中定义browser_action元素...

"browser_action": {
   "default_title": "action description",
   "default_icon": "icon.png"
}
Run Code Online (Sandbox Code Playgroud)

...并将此代码放在后台脚本中:

// Define behavior when browser action icon is clicked
chrome.browserAction.onClicked.addListener(function(tab) {
   // executed when the user clicks on the browser action icon
});
Run Code Online (Sandbox Code Playgroud)

或者,如果您想违反约定并使用pageAction,您可以使用问题中的manifest.json代码并将以下内容放入后台脚本:

// Show page action icon in omnibar.
function showPageAction( tabId, changeInfo, tab ) {
    chrome.pageAction.show(tabId);
};
// Call the above function when the url of a tab changes.
chrome.tabs.onUpdated.addListener(showPageAction);
Run Code Online (Sandbox Code Playgroud)

有关进一步研究,请查看其部分示例扩展的源代码.