Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用indexedDB时没有来自sendMessage的响应_Javascript_Google Chrome Extension_Indexeddb - Fatal编程技术网

Javascript 使用indexedDB时没有来自sendMessage的响应

Javascript 使用indexedDB时没有来自sendMessage的响应,javascript,google-chrome-extension,indexeddb,Javascript,Google Chrome Extension,Indexeddb,我正在使用indexedDB编写一个chrome扩展,希望使用sendMessage将数据从后台页面传递到弹出窗口。 如果按下该按钮,将从弹出窗口向后台发送一条消息,并将响应写入“结果”div。 日志消息都正常,但在“openRequest.onsuccess”块中没有发送响应 我不确定为什么没有从openRequest.onsuccess接收到响应,但在写入控制台消息之后,控制台消息仍然没有收到 console.log的输出 弹出窗口 processMessage()-2 背景 process

我正在使用indexedDB编写一个chrome扩展,希望使用sendMessage将数据从后台页面传递到弹出窗口。
如果按下该按钮,将从弹出窗口向后台发送一条消息,并将响应写入“结果”div。 日志消息都正常,但在“openRequest.onsuccess”块中没有发送响应

我不确定为什么没有从openRequest.onsuccess接收到响应,但在写入控制台消息之后,控制台消息仍然没有收到

console.log的输出
弹出窗口
processMessage()-2

背景
processMessage()-2
processMessage()-1

结果的内容
processMessage()-2

popup.js

var popupInst;
var popupPage = function() {
    var mThis = this;
    this.msg;
    this.init = function() {
        document.querySelector('#btnAdd').addEventListener('click', this.add);
    };
    this.add = function() {
        chrome.extension.sendMessage({ add: { keyName: 'key', valueName: 'value' }}, function(response) {
            mThis.msg = (response.msg)
            console.log(mThis.msg);
            $('#results').empty().append(mThis.msg);
        });
    };
}
document.addEventListener('DOMContentLoaded', function(){popupInst = new popupPage(); popupInst.init();});
var bgInst;
var backgroundPage = function()
{
    var mThis = this;
    this.dbName = 'test-db';
    this.db;
    this.init = function() {
        var openRequest = window.indexedDB.open(mThis.dbName,1);
        openRequest.onsuccess = function(evt) {
            this.db = openRequest.result;
        };
        openRequest.onupgradeneeded = function(evt) {
            var objStore = evt.target.result.createObjectStore(this.dbName,{keyPath:"keyName"});
            objStore.createIndex("keyName","keyName",{unique:true});
            objStore.createIndex("valueName","valueName",{unique:false});
        };
        chrome.extension.onMessage.addListener(this.processMessage);
    };
    this.processMessage = function(msgRequest,msgSender,msgCallback) {
        if(msgRequest.add) {
            var openRequest = window.indexedDB.open(mThis.dbName);
            openRequest.onsuccess = function(evt) {
                var str1 = 'processMessage() - 1';
                msgCallback({ msg: str1 }); -> this message is never received in popup.js
                console.log(str1);          -> but this message is written to the log
            };
            var str2 = 'processMessage() - 2';
            msgCallback({ msg: str2 });
            console.log(str2);
        }
    };
}
document.addEventListener('DOMContentLoaded', function(){bgInst = new backgroundPage(); bgInst.init();});
background.js

var popupInst;
var popupPage = function() {
    var mThis = this;
    this.msg;
    this.init = function() {
        document.querySelector('#btnAdd').addEventListener('click', this.add);
    };
    this.add = function() {
        chrome.extension.sendMessage({ add: { keyName: 'key', valueName: 'value' }}, function(response) {
            mThis.msg = (response.msg)
            console.log(mThis.msg);
            $('#results').empty().append(mThis.msg);
        });
    };
}
document.addEventListener('DOMContentLoaded', function(){popupInst = new popupPage(); popupInst.init();});
var bgInst;
var backgroundPage = function()
{
    var mThis = this;
    this.dbName = 'test-db';
    this.db;
    this.init = function() {
        var openRequest = window.indexedDB.open(mThis.dbName,1);
        openRequest.onsuccess = function(evt) {
            this.db = openRequest.result;
        };
        openRequest.onupgradeneeded = function(evt) {
            var objStore = evt.target.result.createObjectStore(this.dbName,{keyPath:"keyName"});
            objStore.createIndex("keyName","keyName",{unique:true});
            objStore.createIndex("valueName","valueName",{unique:false});
        };
        chrome.extension.onMessage.addListener(this.processMessage);
    };
    this.processMessage = function(msgRequest,msgSender,msgCallback) {
        if(msgRequest.add) {
            var openRequest = window.indexedDB.open(mThis.dbName);
            openRequest.onsuccess = function(evt) {
                var str1 = 'processMessage() - 1';
                msgCallback({ msg: str1 }); -> this message is never received in popup.js
                console.log(str1);          -> but this message is written to the log
            };
            var str2 = 'processMessage() - 2';
            msgCallback({ msg: str2 });
            console.log(str2);
        }
    };
}
document.addEventListener('DOMContentLoaded', function(){bgInst = new backgroundPage(); bgInst.init();});

看看这个答案:谢谢,现在可以了!可能重复的