1

我做了一个扩展page_action,不幸的是我也不能使用browser_action,所以我需要重写我的代码browser_action

我正在检查选项卡的 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);

所以我尝试将 Event 从 更改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) 

我无法理解我所做的错误,所以如果有人可以帮助我,那就太好了。

4

1 回答 1

0

回调函数的签名与 foronActivated不同onUpdated

参见事件处理程序的chrome.tabs API :onActivated

打回来

回调参数应指定如下所示的函数:

function(object activeInfo) {...};

这意味着当您的checkHosts方法作为事件处理程序调用时,仅填充第一个参数(它是activeInfo对象),而其他两个未定义。因此您收到的错误。

要解决您的问题,您必须更改方法的签名。请注意,activeInfo您将收到的对象没有标签的新网址。

于 2013-10-04T19:12:42.370 回答