javascript - Chrome Extension WebSQL - 需要后台和内容页面来访问同一个数据库,但他们不需要

标签 javascript google-chrome google-chrome-extension web-sql

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

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

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

我希望我可以从内容页面访问 EXTENSION 的 数据库,而无需求助于笨拙的消息传递机制。有办法吗?

最佳答案

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

所有扩展脚本都可以communicate虽然有背景页面。尝试在后台页面上为数据库创建一个代理 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.
    } ...
}

以上代码未经测试,只是一个草图。

关于javascript - Chrome Extension WebSQL - 需要后台和内容页面来访问同一个数据库,但他们不需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11030837/

相关文章:

javascript - 允许在 JQUERY 类中单击一次

javascript - ChartJs 无法使用此 JSON 对象

javascript - MVC : While retrieving the passed Json object from controller in view, JavaScript 错误

google-chrome - 如何在 Chrome 扩展程序中测试可选权限?

javascript - Chrome 扩展 - 修改消息事件的弹出页面

javascript - Nextjs - Reactjs - 链接模式 - 不变违规 : React. Children.only 预计会收到单个 React 元素子元素

javascript - Firefox 网络浏览器中不显示确认消息

javascript - 内容脚本的替代方案?

javascript - chrome 扩展 - 使用内容脚本减少加载时间的最佳方法

google-chrome - 为什么 chrome.extension.getBackgroundPage() 返回 null?