0

我已經與page_action進行了擴展,但不幸的是我也不能使用browser_action,所以我需要將我的代碼重寫爲browser_actionChrome擴展程序:在當前選項卡上的Eventlisten

我正在檢查一個標籤的URL,當它與RegExp匹配時,圖標會發生變化。這工作,但只有當一個標籤重新加載或創建,但不是當我只是訪問不同的,已加載標籤。所以即使URL完全「錯誤」,該圖標也不會改變。

只是舊代碼:

function checkHosts(tabId, changeInfo, tab) { 
    if(hosts.length>0) 
     if(hosts.some(function (element, index, array) { return RegExp("(http|ftp|https)://([\w\.]*)"+element+"(.*)/").test(tab.url)})) { 
      chrome.browserAction.setIcon({path: 'img/icon-19.png'}) 
     } else { 
      chrome.browserAction.setIcon({path: 'img/icon-19_off.png'}) 
     } 
} 

chrome.tabs.onUpdated.addListener(checkHosts); 

於是,我就事件改變從onUpdatedonActivated。它給了我這個錯誤(振作起來):

Error in event handler for tabs.onActivated: TypeError: Cannot read property 'url' of undefined 
at chrome-extension://hjldlodngamjdnompiekojgebnmolnab/background.js:28:122 
at Array.some (native) 
at checkHosts (chrome-extension://hjldlodngamjdnompiekojgebnmolnab/background.js:28:12) 
at Function.target.(anonymous function) (extensions::SafeBuiltins:19:14) 
at Event.dispatchToListener (event_bindings:382:22) 
at Event.dispatch_ (event_bindings:367:27) 
at dispatchArgs (event_bindings:241:26) 
at dispatchEvent (event_bindings:250:7) 

我不能得到錯誤,我做到了,所以這將是非常好的,如果有人可以幫助我。

回答

0

onActivated的回調函數的簽名不同於onUpdated的回調函數的簽名。

比照chrome.tabs APIonActivated事件處理程序:

回調

回調參數應指定一個函數,它看起來像這樣:

function(object activeInfo) {...};

那意味着什麼時候您的checkHosts方法被稱爲事件處理程序,只填充第一個參數(它是activeInfo對象),其他兩個未定義。因此,你收到的錯誤。

要解決您的問題,您必須更改方法的簽名。請注意,您將收到的activeInfo對象沒有該選項卡的新網址。

相關問題