页面操作按钮图标在运行内容脚本的URL上显示为灰色

时间:2017-01-06 20:41:49

标签: javascript google-chrome google-chrome-extension

我写了一个Chrome扩展程序,其中包含 manifest.json 中的以下行 (我只删除了名称和描述元数据):

"permissions":[],
"content_scripts":[
    {
        "run_at":"document_start",
        "matches":[
            "https://www.amazon.de/*",
            "https://www.amazon.it/*",
            "https://www.amazon.co.uk/*",
            "https://www.amazon.es/*",
            "https://www.amazon.fr/*"
        ],
        "js":[
           "jquery-1.10.2.min.js", "schnapperama.js"
        ]
    }
],
"background": {
    "persistent": false,
    "scripts": ["background.js"]
},
"options_page": "options/index.html",
"icons":{
    "16":"options/img/schnapper16.png",
    "48":"options/img/schnapper48.png",
    "128":"options/img/schnapper128.png"
},
"page_action":{
    "default_icon":"options/img/schnapper38.png"
},
"web_accessible_resources":[],
"content_security_policy":"script-src 'self'  https://www.amazon.de; object-src 'self'",
"content_security_policy":"script-src 'self'  https://www.amazon.it; object-src 'self'",
"content_security_policy":"script-src 'self'  https://www.amazon.fr; object-src 'self'",
"content_security_policy":"script-src 'self'  https://www.amazon.es; object-src 'self'",
"content_security_policy":"script-src 'self'  https://www.amazon.co.uk; object-src 'self'"

如您所见,它已设置page_action并且还输入了一些matches

如果我访问matches中提及的任何网站,我的脚本已成功运行。尽管如此,我的扩展程序的图标在这些页面上保持灰色。

我错过了什么?

2 个答案:

答案 0 :(得分:6)

您必须致电chrome.pageAction.show()才能激活您的页面操作按钮(图标不会显示为灰色)。显示(启用)pageAction按钮不会自动与运行内容脚本的页面相关联。

来自Chrome的pageAction page(强调我的):

  

您分别使用pageAction.showpageAction.hide方法显示页面操作并显示为灰色。 默认情况下,页面操作显示为灰色。显示时,指定应显示图标的选项卡。在关闭选项卡或开始显示不同的URL之前,图标仍然可见(例如,因为用户单击了链接)。

从您构建扩展程序的方式来看,最好的办法是让内容脚本向您的后台脚本发送一条消息chrome.runtime.sendMessage(),告诉它显示相关标签的页面操作图标

可能是这样的:

后台脚本:

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    if (message.type === 'showPageAction') {
        chrome.pageAction.show(sender.tab.id);
    }
});

内容脚本:

chrome.runtime.sendMessage({type:'showPageAction'});

答案 1 :(得分:-3)

在manifest.json文件中添加browser_action.default_icon。

这是答案!

Why is my Chrome Extension grayed out?