javascript - "TypeError: Cannot read property ' 在后台页面查询 ' of undefined"的 chrome.tab.query

标签 javascript jquery google-chrome-extension tabs google-chrome-devtools

我使用此代码来获取所有打开的选项卡 URL:

function setPhone(phone) {
    chrome.tabs.query({
    }, function (tabs) {
        var tabURL = tabs[0].url;
        console.log(tabURL);
    });
}

这是开始监听 TCP 套接字的扩展的一部分。当建立连接并收到命令时,调用 setPhone 函数。该函数在事件中被调用:

function onAcceptCallback(tcpConnection, socketInfo) {
    var info = "[" + socketInfo.peerAddress + ":" + socketInfo.peerPort + "] Connection accepted!";
    log.output(info);
    console.log(socketInfo);
    tcpConnection.addDataReceivedListener(function (data) {
        var lines = data.split(/[\n\r]+/);
        for (var i = 0; i < lines.length; i++) {
            var line = lines[i];
            if (line.length > 0) {
                var info = "[" + socketInfo.peerAddress + ":" + socketInfo.peerPort + "] " + line;
                log.output(info);

                var cmd = line.split(/\s+/);
                try {
                    switch (cmd[0]) {
                        case 'Phone':
                            setPhone(cmd[1]);
                            tcpConnection.sendMessage('+OK-Phone');
                            break;
                        case 'SetClientPage':
                            clientEditPage = cmd[1];
                            tcpConnection.sendMessage('+OK-SetClientPage');
                            break;
                        case 'SetSearchPage':
                            clientSearchPage = cmd[1];
                            tcpConnection.sendMessage('+OK-SetSearchPage');
                            break;
                        default:
                            tcpConnection.sendMessage('+ERR-Comando No Encontrado');
                    }
                    //tcpConnection.sendMessage(Commands.run(cmd[0], cmd.slice(1)));
                } catch (ex) {
                    tcpConnection.sendMessage(ex);
                }
            }
        }
    });
};

最后,这是 list 文件:

{
  "manifest_version": 2,

  "name": "Busca Cliente Lipigas",
  "description": "Esta extension permite recibir un numero de telefono desde el servidor DDE y realizar la busqueda del cliente en la pagina Web de Lipigas.",
  "version": "1.0",

  "permissions": [
    "tabs",
    "background",
    "system.network"
  ],

  "app": {
    "background": {
      "scripts": ["tcp-server.js", "main.js"],
      "persistent": true
    }
  },

  "sockets": {
    "tcpServer": {
      "listen": "*"
    }
  }
}

以上所有内容都会产生错误:TypeError:无法读取未定义的属性“query”

编辑:

为了测试,我在扩展程序启动时放置了查询方法,并出现了相同的错误:

chrome.app.runtime.onLaunched.addListener(function () {

    chrome.tabs.query({
    }, function (tabs) {
        var tabURL = tabs[0].url;
        console.log(tabURL);
    });


    console.log('Aplicación iniciada.');
    startServer('127.0.0.1', 8888);
});

请问有什么帮助吗? 干杯 海梅

最佳答案

您正在编写一个 Chrome 应用程序,但是 chrome.tabs.* api 只能由 Chrome 扩展程序访问。这就是您收到错误的原因。

关于javascript - "TypeError: Cannot read property ' 在后台页面查询 ' of undefined"的 chrome.tab.query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39175541/

相关文章:

javascript - 如何获取 Google Plus 通知数量?

javascript - 在 3 维数组中查找最大值及其索引

javascript - 是否有处理浏览器大小调整的最佳实践?

javascript - Chrome 与 Firefox 扩展

javascript - 默认按钮 div

javascript - touchstart 阻塞按钮监听器

javascript - 使用 Chrome 扩展更改 DOM 内容

javascript - 解析服务器云代码 - 检查用户名

javascript - 涉及转义符号的正则表达式

javascript - 使用javascript将标签文本设置为跨越宽度