如何使用 postMessage API 发送 javascript 对象

how to send javascript object with postMessage API

我知道 node.js 有加密模块(使用 openssl)来完成 enc/decrypt(aes,ecc...) 工作。但不知道如何在浏览器中进行。

所以我们使用 elliptic 包,并将其打包在 bundle.js 中,它在网络上运行良好。

我们想把它做成一个chrome插件。但是我不知道chrome插件是如何提供功能给用户网页调用的。

我在 content_script 中使用 postMessage 向用户网页发送消息,但只能发送 json 数据,如果我用 javascript 对象发送它(bundle.js object I pack with many enc functions). 它会抱怨 'could not be cloned' error。

更好的方法是将加密函数保留在 background.js 中,并通过消息将您想要处理的数据传递到后台,并让它将结果发送回页面。

例如,如果您想加密选定的文本,请在您的内容脚本中:

const encryptText = function (text) {
  return new Promise(function (resolve,reject) {
    chrome.extension.sendMessage({
      method : 'cryptoFunc',
      data : text,
    });
    let tempListener = function (response,sender) {
      if (response.method === 'cryptoFunc_response') {
        resolve(response.data);
        chrome.extension.onMessage.removeListener(tempListener);
      }
    };
    chrome.extension.onMessage.addListener(tempListener);
  });
};
let selectedText = window.getSelection().toString();
encryptText(selectedText).then(function (encrpted) {
  console.log(encrypted);
});

在您的后台脚本中:

chrome.extension.onMessage.addListener(function (request,sender) {
  if (request.method === 'cryptoFunc') {
    let result = cryptoFunc(request.data);
    chrome.tabs.sendMessage(sender.tab.id, {
      method : 'cryptoFunc_response',
      data : result,
    });
  }
});