str*_*act 3 javascript google-chrome-extension reactjs
您好,我想做的是发送一个从background.js 文件派生的字符串并将其发送到我的react 应用程序(特别是App.js 使用的组件)。我在 component.js 文件顶部有 /* global chrome */ ,并且能够将数据存储在 chrome 本地存储上,但是我的问题是如何确保可以在 React 应用程序之前将此数据存储在变量中已处理?例如,即使我能够在组件内分配来自 chrome 存储的数据的变量,但它仅在创建我的 React 应用程序后才会存储。我现在尝试的是在background.js 中发送一条chrome 消息,并尝试在组件中监听此消息以存储变量,但是监听器似乎不起作用。任何帮助,将不胜感激!(ps,这是使用功能组件,但也将不胜感激类组件中的帮助)
组件.js:
chrome.runtime.onMessage.addListener(function(msg) {
if(msg.type == "USER_STORED") {
chrome.storage.local.get(['name'], function(result) {
console.log("User is " + result.name);
username = result.name;
});
}
});
Run Code Online (Sandbox Code Playgroud)
背景.js:
chrome.storage.local.set({name: username}, function() {
console.log("User is set to " + username);
chrome.runtime.sendMessage({type: "USER_STORED" });
console.log("message sent");
});
// Open extension window
console.log("WINDOW_OPENED");
var win = window.open("index.html", "extension_popup");
Run Code Online (Sandbox Code Playgroud)
控制台: 扩展控制台图像
你使用了错误的方法。您根本不需要从后台发送此类消息,也不需要在弹出窗口中监听它们。只需将chrome.storage.local.get调用添加到弹出入口点(可能index.js)并ReactDOM.render用其回调包装即可。像这样的东西:
chrome.storage.local.get(null, function (data) {
ReactDOM.render(
<App {...data} />,
document.getElementById('root')
)
});
Run Code Online (Sandbox Code Playgroud)
然后,来自的数据chrome.storage将通过 props 在根的所有子组件中可用<App>。像这样的东西:
function YourComponent(props) {
console.log("User is " + props.name);
return <h1>Hello, {props.name}</h1>;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5489 次 |
| 最近记录: |