Google chrome extension 执行官的不稳定行为描述:“;无法访问chrome://URL";在…上http://www.imdb.com/list

Google chrome extension 执行官的不稳定行为描述:“;无法访问chrome://URL";在…上http://www.imdb.com/list,google-chrome-extension,Google Chrome Extension,我正在执行一些。。。特定的URL。 它在大多数情况下工作正常,但有时不行。然后我用F5重新加载页面,同样,它在大多数情况下运行良好。 在事件页面中,我侦听onDOMContentLoaded chrome.webNavigation.onDOMContentLoaded.addListener(listener, {'url': urlFilter}); 听众听得很好 function listener(tab){ t=tab; chrome.tabs.executeScrip

我正在执行一些。。。特定的URL。 它在大多数情况下工作正常,但有时不行。然后我用F5重新加载页面,同样,它在大多数情况下运行良好。 在事件页面中,我侦听onDOMContentLoaded

chrome.webNavigation.onDOMContentLoaded.addListener(listener, {'url': urlFilter});
听众听得很好

function listener(tab){
    t=tab;
    chrome.tabs.executeScript(tab.id, {file: 'elementoWeb 2.1.js'}, function(resultado){
        if(chrome.runtime.lastError)
            console.log('Ejecutando elementoWeb.js, chrome.runtime.lasterror: ', chrome.runtime.lastError, '\nTab: ', t);
    }); 
    chrome.tabs.executeScript(tab.id, {file: 'imdbListaCs.js'}    , function(resultado){
        if(chrome.runtime.lastError)
            console.log('Ejecutando imdbListaCs.js, chrome.runtime.lasterror: ', chrome.runtime.lastError, '\nTab: ', t);
    });
}
当它失败时,有两个类似这样的控制台日志,每次执行尝试一个:

Ejecutando elementoWeb.js, chrome.runtime.lasterror:  Object {message: "Cannot access a chrome:// URL"} 
Tab:  Object {frameId: 0, processId: 320, tabId: 405, timeStamp: 1421159075402.253, url: "http://www.imdb.com/list/......"}
frameId: 0
processId: 320
tabId: 405
timeStamp: 1421159075402.253
url: "http://www.imdb.com/list/......"
__proto__: Object
(我缩短了imdb的URL)

选项卡405上有imdb.com页面。不是chrome://url.

有时错误消息会有所不同:

Cannot access contents of url "chrome-devtools://devtools/bundled/devtools.html?&dockSide=undocked&toolbarColor=rgba(223,223,223,1)&textColor=rgba(0,0,0,1)". Extension manifest must request permission to access this host.
我没有激活任何devtools的实验


有人有同样的奇怪问题吗?

chrome.webNavigation.onDOMContentLoaded事件不会得到一个,而是一个包含导航信息的对象。查看(或查看打印到控制台的对象!),它显示选项卡的ID在
tabId
属性中提供

在代码中,您读取参数的一个不存在的属性(因此
未定义
),并将其传递给。由于缺少选项卡ID,
executeScript
默认为当前窗口的活动选项卡。当在不同的窗口或选项卡上触发导航时,内容脚本将插入错误的选项卡。如果您无法访问该选项卡(例如,因为它是
chrome://newtab
),Chrome拒绝执行脚本。如果您正在查看devtools窗口,那么您将得到一个关于该窗口的错误(尽管不再是错误)

要解决问题,请将函数更改为

function listener(details) { // changed "tab" to "details"
    chrome.tabs.executeScript(details.tabId, // (was "tab.id")

什么是
urlFilter
?您是否检查了后台页面控制台中的任何错误?非常感谢!即使犯了那个错误,我也不知道它为什么起作用,但现在我不在乎了。实际上,应用您的建议,问题仍然存在,但这次我可以检测到listener有时被调用为空参数,我不知道为什么,这导致了错误。现在我从一开始就检查它。