我正在尝试以消息的形式将会话数据从我的 React 应用程序发送到 chrome 扩展程序(MV3)。根据文档,我应该使用
chrome.runtime.sendMessage(editorExtensionId, {openUrlInEditor: url},
function(response) {
if (!response.success)
handleError(url);
});
但是,这样做会给我以下错误:TypeError: Cannot read property 'sendMessage' of undefined
有没有办法解决这个问题?我/*global chrome*/
在文件顶部添加了消除chrome undefined
错误的内容,但现在它是未定义的运行时。
清单.json:
"action": {
"default_popup": "popup.html",
"default_icon": "icon-34.png"
},
"permissions": ["storage", "tabs", "activeTab" , "scripting"],
"chrome_url_overrides": {
"newtab": "newtab.html"
},
"externally_connectable": {
"ids": ["extension_id"],
"matches": ["http://localhost:3001/"]
},
App.js(反应应用程序):
import React from 'react'
import { useState } from 'react'
import logo from './logo.svg';
import './App.css';
import { Auth } from 'aws-amplify';
const App = () => {
function test() {
const extensionId = 'extension_id';
const session = "session";
chrome.runtime.sendMessage(extensionId, session,
function(response) {
console.log(response);
});
}
const [loggedIn, setLoggedIn] = useState(false)
const signInHandler = (event) => {
test();
}
return (
<div>
<button onClick={signInHandler}>Sign in</button>
</div>
)
}
Background.js 中的监听器:
chrome.runtime.onMessageExternal.addListener(
function (request, sender, sendResponse) {
if (request.session) {
console.log(request);
}
sendResponse("OK");
});