如何修复函数在JS中未定义

时间:2019-06-01 16:48:54

标签: javascript

将Chrome扩展程序移植到Firefox。

// Changes extension icon on tab switch
browser.tabs.onActivated.addListener(async function (change) {
  var status = await currentStatus();
  browser.tabs.get(info.tabId, function (change) {
    if (!(status) || info.url.match(/https:\/\/url.com\/*/) == null) {
      browser.browserAction.setIcon({
        path: 'images/icon-19-disabled.png'
      });
    } else {
      browser.browserAction.setIcon({
        path: 'images/icon-19.png'
      });
    }
  });
});

// Changes extension icon on tab URL switch
browser.tabs.onUpdated.addListener(async function (change, tab) {
  var status = await currentStatus();
  if (tab.url == undefined) {
    return;
  }

  if (!(status) || tab.url.match(/https:\/\/url.com\/*/) == null) {
    browser.browserAction.setIcon({
      path: 'images/icon-19-disabled.png'
    });
  } else {
    browser.browserAction.setIcon({
      path: 'images/icon-19.png'
    });
  }
});

调试器吐出“未定义更改”

我尝试将函数名称更改为info,但是调试器抛出相同的错误。

1 个答案:

答案 0 :(得分:1)

如果您的js解析器告诉您change is undefined

这就是问题所在。 change未定义。 将其重命名为info不会改变任何事情,除非您还有一个对象info, 您可以访问。

因此解析器正好在告诉您出了什么问题,在此行内:

browser.tabs.get(info.tabId, function(change) {
if (!(status) || info.url.match(/https:\/\/url.com\/*/) == null) {

它告诉您info === undefined,当然您不能做类似undefined.tabIdundefined.url.match()的事情。因为undefined

中没有此类Object变量或方法