chrome.tabs.onUpdated.addListener(namedFunction) - 函数范围

时间:2018-01-09 14:54:19

标签: javascript google-chrome google-chrome-extension scope

我正在使用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 不是由我设置的事件监听器调用的。

0 个答案:

没有答案