【问题标题】:Public Database between chrome extensionschrome 扩展之间的公共数据库
【发布时间】:2012-01-19 13:59:55
【问题描述】:

我想创建一个公共数据库,以便其他扩展可以访问它、创建表、添加实体、删除他们想要的实体。

我看到这样做的唯一方法是在多个扩展之间使用消息传递,但这种解决方案对我来说是有问题的,因为我需要“管理”权限才能知道其他扩展 ID。

是否可以在不知道其 ID 的情况下向所有扩展发送消息?还是有另一种在没有发布-订阅同步的情况下实现公共数据库的方法?

顺便说一句 - 我可以使用 localStorage 或 WebSQL。

【问题讨论】:

    标签: google-chrome-extension local-storage web-sql


    【解决方案1】:

    您能否创建一个扩展程序集线器,用于注册其他扩展程序并具有消息传递中心。

    所有想要与公共数据库通信的扩展都可以通过集线器进行。从后台页面初始化后,每个扩展都可以向中心注册他们的 ID 以及他们想要订阅的事件。

    从每个扩展注册操作

    chrome.tabs.sendRequest("hub", {
        action: "register",
        key: "somePrivKey",
        id: "extId", 
        subscribeTo: ["createFoo", "deleteFoo"]
    });
    

    然后,执行的每个操作都将传达给集线器:

    chrome.tabs.sendRequest("hub", {
        action: "createFoo",
        key: "somePrivKey",
        context: 1
    });
    

    然后集线器扩展将监听事件。对于“注册”操作,集线器会将扩展注册为“subscribeTo”操作的端点。对于其他操作(“createFoo”或“deleteFoo”),集线器将遍历事件的已注册扩展列表并执行发送“操作”名称和可选“上下文”的 sendRequest。

    在集线器和所有想要通信的扩展之间可能知道一个共享的“密钥”,以防止集线器侦听来自未知来源的事件。

    集线器扩展 background.js:

    var actionToExtMap = {};
    
    chrome.extension.onRequestExternal.addListener(function(request, sender, sendResponse) {
        if (request.key === "somePrivKey") {
            if (request.action === "register") {
                for (i = 0; i < request.subscribeTo.length; i++) {
                    var action = request.subscribeTo[i];
    
                    var extsionsForAction = actionToExtMap[action] || [];
                    extsionsForAction.push(request.id)
                }
    
            } else if (request.action) {
                var extensionsToSendAction = actionToExtMap[request.action];
                for (i = 0; i < extensionsToSendAction.length; i++) {
                    chrome.extension.sendRequest(extensionsToSendAction[i], {
                        action: request.action,
                        context: request.context //pass an option context object
                    }
                }
            }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2012-09-03
      • 1970-01-01
      • 2023-01-17
      • 2022-08-03
      • 2014-08-29
      • 2013-02-10
      • 1970-01-01
      相关资源
      最近更新 更多