reactjs chrome扩展消息传递不起作用

Jon*_*Jon 8 google-chrome-extension reactjs

我正在尝试使用create-react-app中的模板构建来构建一个hello world chrome扩展.

我可以通过添加清单来创建chrome扩展:

manifest.json

{
  "manifest_version": 2,

  "name": "Demo React-Chrome extension",
  "description": "This extension shows how to run a React app as a Chrome extension",
  "version": "1.0",

  "permissions": [
      "debugger",
      "activeTab",
      "tabs",
      "background",
      "https://*/",
      "http://*/"
  ],
  "browser_action": {
      "default_icon": "favicon.ico",
      "default_popup": "index.html"
  },
  "background": {
    "scripts":["background.js"]
  }
}
Run Code Online (Sandbox Code Playgroud)

background.js:

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
  console.log(message);
  switch(message.action){
    case "popupOpen":{
      console.log('popup is open');
      chrome.tabs.executeScript({
        code: 'document.body.style.backgroundColor="red"'
      });
    }
      break;

  }

});
Run Code Online (Sandbox Code Playgroud)

App.js

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';


class App extends Component {
  constructor(props) {
    super(props);
    this.state = {showHeader: true};
    this.handleClick = this.handleClick.bind(this);
    chrome.runtime.sendMessage({action: "popupOpen"}).bind(this);

  }

  handleClick() {
    console.log('clicked');
    this.setState( prevState => ({
      showHeader: !prevState.showHeader
    }));
  }
  render() {
    return (
      <div className="App">
        <div className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          {this.state.showHeader && <h2>Welcome to React Jon</h2>}
        </div>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
        <button onClick={this.handleClick}>
          {this.state.showHeader ? "HIDE" : "SHOW"}
        </button>
      </div>
    );
  }
}

export default App;
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时npm run build,我收到此错误:

/dev/hello-world/src/App.js 11:5错误'chrome'未定义no-undef

✖1个问题(1个错误,0个警告)

如何调用chrome.runtime或将反应应用程序中的消息传递给background.js?

Hai*_* Ai 29

此错误来自ESLint,您可以在文件顶部添加以下行.

/*global chrome*/
Run Code Online (Sandbox Code Playgroud)