我正在使用Chrome API开发浏览器扩展程序。对于此特定任务,我需要使用命名函数为 chrome.tabs.onUpdated 事件添加一个侦听器,因为我需要在完成时删除它。
当我在其他事件侦听器中设置此侦听器时会出现此问题 - 更具体地说,对于 DOMContentLoaded 和 单击 事件。
/* This Works */
chrome.tabs.onUpdated.addListener(namedFunction);
function namedFunction(tabId, changeInfo, tab) {
if (changeInfo.status == 'complete') {
console.log('Tab loaded: ' + tab.url);
}
chrome.tabs.onUpdated.removeListener(namedFunction);
return;
}
/* This doesnt work */
function namedFunction(tabId, changeInfo, tab) {
if (changeInfo.status == 'complete') {
console.log('Tab loaded: ' + tab.url);
}
chrome.tabs.onUpdated.removeListener(namedFunction);
return;
}
document.addEventListener('DOMContentLoaded', function() {
var start_btn = document.getElementById('btn-start');
if (start_btn) {
start_btn.addEventListener('click', function() {
chrome.tabs.onUpdated.addListener(namedFunction);
chrome.tabs.create( {'url': currentUrl} );
});
}
});
上面的代码包含在后台脚本中。 manifest.json :
的摘录 "background":{
"scripts": ["script.js"]
},
"permissions": [
"<all_urls>",
"activeTab",
"tabs",
"storage",
"background"
],
我想这与&#34;函数变量范围&#34; 有关。在不起作用的代码示例中,单击按钮时仍会创建一个选项卡,因此我可以访问&#39; chrome。&#39; ,但 namedFunction 不是由我设置的事件监听器调用的。