代码之家  ›  专栏  ›  技术社区  ›  user7607751 Rob W

chrome扩展消息传递:sendResponse不是函数

  •  0
  • user7607751 Rob W  · 技术社区  · 6 年前

    在我的chrome扩展中,我试图在扩展的内部网页之间交换数据 chrome-extension://myExtensionId/path/to/web/page.html 和内容脚本。

    因此,为了使这些数据在不同的内容脚本中持久化,我尝试将其另存为 全局变量 在分机的背景下!我用信息传递来实现。

    我的问题是:

    当我尝试从后台发送响应时,我会收到此错误:

    的事件处理程序出错(未知):类型错误:sendResponse不是 功能

    我跟着 documentation's examples 这是我的尝试:

    scriptOfTheInternalPage.js 以下内容:

    var message = {
        'order': 'setData',
        'varName': 'myArray',
        'data': myArray
    };
    extPort.postMessage(message, function (response) {
        console.log('response:\n', JSON.stringify(response));
    });
    

    background.js 以下内容:

    var globals = {
        'myArray': [],
        ...
    };
    chrome.runtime.onConnect.addListener(function (port) {
        port.onMessage.addListener(
                function (message, sender, sendResponse) {
                    console.log(
                            'the port received this message:\n', JSON.stringify(message), '\n',
                            (sender.tab) ? ' from tab #' + sender.tab.id : ' from the extension!'
                            );
                    if (message.order === 'setData') {
                        globals[message.varName] = message.data;
                        sendResponse({'response': 'data saved!'}); //<=====
                    }
                    return true; //<=== tried to return true here as well;
                });
    });
    

    这个错误是否意味着我应该在 onMessage 事件监听器?

    我很困惑!我错过了什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Xan    6 年前

    港口 onMessage runtime.onMessage sender sendResponse true 也没有效果。

    covered by examples

    port.onMessage.addListener(function(msg) {
      if (msg.joke == "Knock knock")
        port.postMessage({question: "Who's there?"});
    }
    

    两边的监听器,以及某种跟踪请求的方法(唯一ID?)如果可以做几个。