javascript - 响应 storage.get 时出错 : TypeError: Cannot read property 'addListener' of undefined

标签 javascript google-chrome google-chrome-extension

我正在创建一个用于捕获网站屏幕截图的 Google Chrome 扩展程序,并且我需要 popup.js 才能向我的 background.js 发送消息。我不断收到此错误:响应 storage.get 时出错:TypeError:无法读取未定义的属性“addListener”

这是我当前的background.js代码:

chrome.storage.sync.get({
    extensionBehavior: 'onClick',
    logIn: false
}, function(items) {
    if(items.extensionBehavior == 'onClick'){
        // When the extension icon is clicked, send a message to the content script
        chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
            if (!request.message){
                var img;
                chrome.tabs.captureVisibleTab(null, {}, function(dataURL){
                    img = dataURL;
                    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
                        chrome.tabs.sendMessage(tabs[0].id, {"message": tabs[0].url, "statusCode": 0, "image": img, "note" : request.note}, function(response){});
                    });
                });
            }
        });
    }
    else {
        /* ... */
    }
});

我的 popup.js 正在正确发送消息,但我的后台脚本一直给我同样的错误。 chrome.runtime API 在 chrome.storage.sync.get 内部不可用吗?在添加该方法之前,chrome.tabs API 工作正常,并且弹出窗口肯定正在发送消息(我测试了它)。

最佳答案

问题是我使用 popup.js 发送 tabs.sendMessage 而不是 runtime.sendMessage。选项卡 API 将消息发送到内容脚本,而运行时 API 可以在任何地方发送消息。

关于javascript - 响应 storage.get 时出错 : TypeError: Cannot read property 'addListener' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38315115/

相关文章:

javascript - jQuery Accordion ,单击已打开的 Accordion 项目只需切换它

html - Chrome 中滚动条的媒体查询布局问题

Chrome 扩展弹出窗口中的 onclick 中的 JavaScript 警报立即消失

javascript - 显示扩展名中包含的 HTML 文件

google-chrome-extension - 从 Chrome 扩展访问/编辑 iframe 的内容

javascript - 如果单击按钮,显示窗口确认并提交表单

javascript - 如何使用对象数组过滤数组对象

javascript - 在社交网络中出现 W3c 错误

javascript - 如何确定脚本是否已从 Chrome 扩展程序注入(inject)到文档中

javascript - 如何捕获或收听浏览器通知?