【问题标题】:how to make on/off buttons/icons for a chrome extension?如何为 chrome 扩展制作开/关按钮/图标?
【发布时间】:2013-04-14 17:10:10
【问题描述】:

我想让用户决定何时运行脚本,这样当浏览器打开时,会显示“关闭”图标并且没有脚本运行;但是当用户单击它时,它会变为“打开”图标并执行用户脚本,直到用户单击关闭。我有两个 32x32 的 png 图标:on.pngoff.png

我的两个问题:

  1. 如何将默认图标设置为我的 off.png?我在manifest.json 中尝试过这个,但它没有设置图标,而是显示了一个拼图(我假设是默认值):

    ...
    "browser_action": {
       "default_icon": {
           "32": "off.png"
           },
       "default_title": "icon"
    },
    "icons": {
       "32": "on.png",
       "32": "off.png"
    },
    "background": {
       "scripts": ["background.js"] 
    }, 
    "content_scripts": [{ 
       "js": ["SCRIPT.user.js"]
    ...
    
  2. 这是我的background.js,我暂时在其中创建了一个快速功能,以尝试根据onClicked 切换开/关

    var status = 0;
    
    function toggle() {
    if (status == 0){
        chrome.browserAction.setIcon({path: "on.png", tabId:tab.id}); // so it's set for the tab user is in
        chrome.tabs.executeScript(tab.id, file:"SCRIPT.user.js"); //execute for this tab
        status++;
    }
    if (status == 1){
        chrome.browserAction.setIcon({path: "off.png", tabId:tab.id});
        chrome.tabs.executeScript(tab.id, code:"alert()"); // execute nothing when off
        status++;
    }
    if (status > 1)
        status = 0; // toggle
    }
    
    chrome.browserAction.onClicked.addListener(function(tab) {
        toggle();
    });
    

(我应该提到,当我在“加载解压扩展”中加载包含我的脚本、图标和清单的文件夹,然后选择“检查视图”以检查是否有任何立即错误时,我看到 Uncaught SyntaxError: Unexpected token : 在background.js,虽然我不知道它指的是什么)......而且它似乎没有在脚本文件夹中显示我的用户脚本

那么,有什么想法,帮忙吗?

【问题讨论】:

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


    【解决方案1】:

    好的,让我对您的清单和背景页面进行一些更改。

    ma​​nifest.json

    "browser_action": {
      "default_icon": "off.png",
      "default_title": "icon"
    },
    

    这将使默认off.png。至于图标部分,请阅读docs 以了解它的用途,但现在只需将其完全删除。还要删除您在 contentScripts 部分中的内容。如果您想以编程方式注入它,则无需在清单中列出它。

    接下来对背景页面进行一些更改,使其更加干净:

    background.js

    var toggle = false;
    chrome.browserAction.onClicked.addListener(function(tab) {
      toggle = !toggle;
      if(toggle){
        chrome.browserAction.setIcon({path: "on.png", tabId:tab.id});
        chrome.tabs.executeScript(tab.id, {file:"SCRIPT.user.js"});
      }
      else{
        chrome.browserAction.setIcon({path: "off.png", tabId:tab.id});
        chrome.tabs.executeScript(tab.id, {code:"alert()"});
      }
    });
    

    【讨论】:

    • @tempcode 我之前刚刚复制了你的代码,但是当我再次查看它时,我发现你错过了 codefile 周围的 {} 部分 executeScript 尝试添加看看错误是否消失了。
    • 好的,障碍已经过去了,我们快到了。该修复程序允许我从关闭切换到打开 (在我的第一次测试中,我遇到了 "Extension manifest must request permission to access this host" - 因为您建议删除 manifest 中的 content-scripts 部分,其中我有 matchesexcludes,我补充说permissions 来修复该错误),但还有一个最后一个小问题:一旦我将其“打开”,我就无法单击以将其关闭,它只会保持“打开”状态,直到重新加载页面(至少我们知道唯一的tab.id 有效)。但除此之外,其余的似乎都在工作。感谢您迄今为止的帮助!
    • @tempcode 好的,所以问题似乎是status 是某种关键字,所以var status = false 没有分配false,而是分配"false",因为状态已经定义为一个字符串。将变量名称改为toggle
    • 我也不知道 status 是一个关键字,但它做到了!感谢您的帮助!
    • 请注意,您的图标必须足够小(否则 setIcon 将静默失败):stackoverflow.com/questions/37599144/…
    猜你喜欢
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2017-04-11
    • 2015-12-08
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多