2013-08-30 52 views
2

我已經創建了我的第一個擴展,它將事件處理程序添加到單擊頁面上的所有錨元素。如果用戶第二次點擊圖標,事件處理程序將重新附加到錨點元素並執行兩次。 我需要以下內容如何切換瀏覽器操作的動作?

  • 單擊瀏覽器操作。
  • 將事件添加到錨點元素
  • 如果可能,請在瀏覽器操作圖標中給出該擴展當前處於活動狀態的可視提示。
  • 再次點擊擴展應該刪除事件處理程序,並再次顯示擴展圖標爲禁用。

這可能嗎?

以下是我迄今爲止所嘗試過的。

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

竟被我d當點擊並重新單擊extension_browser_action時,需要將上述處理程序切換到錨上。另外,如果extension_browser-action_icon可以給出關於狀態的一些視覺反饋。

+0

爲什麼不只是使用jquery添加超鏈接點擊處理程序,覆蓋所有人。而不是附加和分離處理程序? – Chris

+0

@Chris我沒有得到什麼區別,如果使。你能否詳細說明一下? – expressions

+0

你可以在內容中加入一些jquery,當超鏈接點擊被捕獲時,將消息傳遞給後臺頁面並顯示HTML消息。 background.js然後會捕獲由contentcript發送的消息並更改瀏覽器圖標? – Chris

回答

6

我能夠在background.js中執行以下操作,其中contentcript添加處理程序,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);