0

我正在尝试以消息的形式将会话数据从我的 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");
});
4

0 回答 0