Chrome 扩展 WebSQL - 需要背景和内容页面才能访问同一数据库,但它们不需要

Pav*_*sev 5 javascript google-chrome google-chrome-extension web-sql

我目前正在为 Chrome 开发一个小型扩展。我需要相同的 websql 数据库作为扩展,但我根据创建数据库的位置获得不同的数据库。

如果我在内容页面中创建数据库,我会获得为用户所在的特定页面创建的数据库。

如果我在后台页面创建数据库,那么我将获得扩展程序自己的数据库。但它对于内容页面是不可见的。

我希望我可以从内容页面访问扩展的数据库,而无需诉诸笨拙的消息传递机制。有没有办法做到这一点?

Kon*_*nel 3

这是不可能的,与 相同localStorage。不同的脚本代表不同的上下文。

不过,所有扩展脚本都可以与后台页面通信。尝试在后台页面上创建数据库的代理 API。这应该很简单。

我会像这样实现它(内容脚本):

chrome.extension.sendRequest({
      method: 'executeSql', 
      sql: 'SELECT title, author FROM docs WHERE id=?',
      params: [10]
   },
   function(response) {
      //do stuff
   }
); 
Run Code Online (Sandbox Code Playgroud)

另一端(背景页):

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.
    } ...
}
Run Code Online (Sandbox Code Playgroud)

上面的代码没有经过测试,只是一个草图。