我目前正在为 Chrome 开发一个小型扩展。我需要相同的 websql 数据库用于扩展,但我会根据创建它们的位置获得不同的数据库。
如果我在内容页面中创建数据库,我会为用户所在的特定页面创建数据库。
如果我在后台页面中创建数据库,那么我将获得扩展程序自己的数据库。但它对内容页面是不可见的。
我希望我可以从内容页面访问EXTENSION 的数据库,而无需求助于笨拙的消息传递机制。有没有办法做到这一点?
我目前正在为 Chrome 开发一个小型扩展。我需要相同的 websql 数据库用于扩展,但我会根据创建它们的位置获得不同的数据库。
如果我在内容页面中创建数据库,我会为用户所在的特定页面创建数据库。
如果我在后台页面中创建数据库,那么我将获得扩展程序自己的数据库。但它对内容页面是不可见的。
我希望我可以从内容页面访问EXTENSION 的数据库,而无需求助于笨拙的消息传递机制。有没有办法做到这一点?
这是不可能的,与localStorage
. 不同的脚本代表不同的上下文。
不过,所有扩展脚本都可以与后台页面通信。尝试在后台页面上为数据库创建代理 API。这应该很简单。
我会像这样实现它(内容脚本):
chrome.extension.sendRequest({
method: 'executeSql',
sql: 'SELECT title, author FROM docs WHERE id=?',
params: [10]
},
function(response) {
//do stuff
}
);
在另一端(背景页面):
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
console.log(request);
if(request.method == 'executeSql' && request.sql) {
db.readTransaction(function (t) {
t.executeSql(request.sql, request.params, function (t, r) {
//send result with sendResponse
}, function (t, e) {
//send error with sendResponse
});
});
} else if(...) { //some other method etc.
} ...
}
以上代码未经测试,只是一个草图。