7

我想让用户决定何时要运行脚本,以便在浏览器打开时显示“关闭”图标并且不运行脚本;但是当用户点击它时,它会变成“开”图标并执行一个用户脚本,直到用户点击。我有两个PNG图标,每个都是32x32:on.pngoff.png如何为Chrome扩展打开/关闭按钮/图标?

我的两个问题:

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

(我要提到的是,当我打开折叠壳体我的剧本,图标和体现在“负荷解包扩展名”,然后选择“检查意见“ 至 检查是否有什么立即出错,我在background.js中看到Uncaught SyntaxError: Unexpected token :,但我不知道它指的是什么)...并且它似乎没有在脚本文件夹中显示我的用户脚本

因此,有什么想法,有帮助吗?

回答

8

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

manifest.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()"}); 
    } 
}); 
+1

@tempcode我刚刚复制的代码之前,但当我看它我再次看到你错过了围绕'executeScript'的'code'和'file'部分的'{}'尝试添加这些部分并查看错误是否消失。 – BeardFist 2013-04-21 22:49:14

+0

好吧,跳栏,我们快到了。该修复允许我从关闭切换到*(在我遇到的第一个测试中,“扩展清单必须请求访问此主机的权限” - 因为您建议删除'manifest'中的'content-scripts'部分, 'matches'和'excludes',我添加了一个'permissions'来解决这个错误)*,但是还有一个最后的小问题:一旦我把它打开,我就不能点击来关闭它,它只是保持“开启“直到页面重新加载(至少我们知道唯一的'tab.id'工作)。但是,除此之外,其余的似乎都在起作用。感谢您一直以来的帮助! – tempcode 2013-04-21 23:11:17

+1

@tempcode好的,所以看起来问题在于'status'是某种关键字,因此'var status = false'不会分配false,而是分配false,因为status已经被定义为一个字符串。改变变量名称来代替'toggle'。 – BeardFist 2013-04-21 23:29:31