2

我需要创建一个有两个按钮的扩展:复制和粘贴。复制按钮将选择页面上的文本输入和文本区域的内容并将其保存在存储模块中。粘贴按钮会将保存的文本粘贴到具有相同 id 的输入和文本区域内的另一个页面上。

我设法使用本地 sotrage 使它工作,但它只将内容保存在同一个域中。我尝试使用 chrome.storage 模块来存储和检索数据;我无法让它发挥作用。

你能告诉我解决这个问题的最佳方法是什么吗?

更新: 扩展有效,但有一点不便:

chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) {      
        storage.get('form_data', function(item) {
            sendResponse(item);
        });   
    }
});

这将返回一个错误:无法发送响应:如果您想在侦听器返回后发送响应,则 chrome.extension.onMessage 侦听器必须返回 true。

var form_data;
chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) {      
        storage.get('form_data', function(item) {
            form_data = item;
        });   
        sendResponse(form_data);
    }
});

这可行,但我必须调用该函数两次(单击粘贴按钮),我猜第一个返回未定义并随后获取数据,第二个调用返回存储值。

4

1 回答 1

0

我用以下代码解决了这个问题:

chrome.extension.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request['request_type'] === 'copy') {
      storage.clear();
      storage.set({'form_data' : request['form_data']});
    } else if (request['request_type'] === 'paste') {
        storage.get('form_data', function(item) {
          chrome.tabs.getSelected(null, function(tab) {
            chrome.tabs.sendMessage(tab.id, item['form_data']);
          });
        });
      }
});
于 2016-09-14T16:06:57.110 回答