我创建了我的第一个chrome扩展,它在点击时为页面上的所有锚元素添加了事件处理程序。如果用户第二次单击该图标,则事件处理程序将重新附加到锚元素并执行两次。 我需要的是
这可能吗?
以下是我迄今为止所尝试的内容。
的manifest.json
{
"name":"NameExtension",
"version":"1.0",
"description":"Here goes the description",
"manifest_version":2,
"browser_action":{
"default_icon":"16x16.png"
},
"background":{
"scripts":["background.js"]
},
"permissions":[
"tabs","http://*/*","https://*/*"
]
}
background.js
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, {file: "contentscript.js"});
});
contentscript.js
var all = document.getElementsByTagName('a');
for(var i=0; i<all.length;i++){
all[i].addEventListener('click',myHandler, false);
}
myHandler = function(event){
alert(event.target.innerText);
}
我希望在锚点上切换上面的处理程序,因为单击并重新点击了extension_browser_action。此外,如果extension_browser-action_icon可以提供有关状态的一些视觉反馈。
答案 0 :(得分:6)
我能够在我的background.js中执行此操作,其中contentscript添加了处理程序,togglecontentscript将其删除。
var x = false;
disableBrowserAction();
function disableBrowserAction(){
chrome.browserAction.setIcon({path:"inactive.png"});
chrome.tabs.executeScript(null, {file: "togglecontentscript.js"})
}
function enableBrowserAction(){
chrome.browserAction.setIcon({path:"active.png"});
chrome.tabs.executeScript(null, {file: "contentscript.js"});
}
function updateState(){
if(x==false){
x=true;
enableBrowserAction();
}else{
x=false;
disableBrowserAction();
}
}
chrome.browserAction.onClicked.addListener(updateState);