如何使用PostMessageAPI发送javascript对象
我知道node.js有加密模块(使用openssl)来执行加密/解密(aes、ecc…)工作。但我不知道如何在浏览器中实现 所以我们使用了这个包,并将它打包在bundle.js中,它在web中运行良好 我们想让它成为一个chrome插件。但我不知道chrome插件如何为用户网页提供调用功能 我在content_脚本中使用postMessage向用户网页发送消息,但如果我使用javascript对象(我用许多enc函数打包的bundle.js对象)发送json数据,则只能发送json数据。它会抱怨“无法克隆”错误如何使用PostMessageAPI发送javascript对象,javascript,encryption,google-chrome-extension,postmessage,Javascript,Encryption,Google Chrome Extension,Postmessage,我知道node.js有加密模块(使用openssl)来执行加密/解密(aes、ecc…)工作。但我不知道如何在浏览器中实现 所以我们使用了这个包,并将它打包在bundle.js中,它在web中运行良好 我们想让它成为一个chrome插件。但我不知道chrome插件如何为用户网页提供调用功能 我在content_脚本中使用postMessage向用户网页发送消息,但如果我使用javascript对象(我用许多enc函数打包的bundle.js对象)发送json数据,则只能发送json数据。它会抱怨
更好的方法是将加密函数保留在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,
});
}
});
我知道window.crypto API,但我认为这是部分支持,我们需要更多的功能,比如Ecc、SM(中国国家密码标准)。我们不希望它像web静态资源一样,所以我们可以在没有用户许可的情况下随时更改它的版本(这就是为什么我们希望它成为插件)要向页面上下文公开函数,唯一的方法是创建DOM脚本元素:。