如何在Chrome扩展程序的content.js中启动React App

时间:2019-08-15 12:51:19

标签: reactjs npm google-chrome-extension

我有一个非常简单的React Application,我想从Chrome扩展程序中将其加载到页面的DOM中。

我正在使用NPM构建可在NPM下正常运行的React应用。

必须通过教程演示如何通过在chrome_url_overrides => newtab ..中调用“ index.html”来实现此目的。

chrome_url_overrides": {
    "newtab": "index.html"
  }

我发现了一些教程,展示了如何将其作为内容脚本进行(这是必需的)。 例如https://medium.com/@yosevu/how-to-inject-a-react-app-into-a-chrome-extension-as-a-content-script-3a038f611067

如本教程中所述,我已经修改了我的NPM构建,以使用一致的名称输出构建的“静态”目录中的js和css文件,以便可以在chrome清单中引用它们。

并且我已将本节添加到我的index.js文件

// Add a root node to the DOM
const rt = document.createElement('div');
rt.setAttribute("id", "my-root");
document.body.appendChild(rt);

ReactDOM.render(<App />, rt); 

到目前为止,很好。

当我使用npm构建代码并以chrome扩展名的形式加载未压缩的目录时,一切似乎都很好,但是在加载的页面上没有任何反应(肯定符合清单中的“匹配”条件)。

我注意到,当它使用index.html文件工作时,由npm构建的该文件的版本包括3组新元素: 1.)我在上面插入的html中所需的div:

<div id="loop-root"/>

2。)以下脚本:

<script src="/static/js/2.chunk.js"/>                                           <script src="/static/js/main.chunk.js"/>

3。)在1到2之间的一些内嵌javascript,如下所示:

<script>!function(f){function e(e){for(var r,t,n=e[0],
.....
;var r=window["webpackJsonploop-messenger"]=window["webpackJsonploop-messenger"]||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;i()}([])</script>

现在,如果我在上面的“ 2”中包含脚本,并且在新的js文件中将内联javascript包含在“ 3”中,我将其作为内容清单中的内容脚本引用,那么当我重新加载时,应用程序将启动给定的页面。

万岁!

...但是这样的控制台中有错误:

Uncaught (in promise) DOMException

应用无法正常运行。

所以,我的问题是: a。)此内联javascript在做什么,为什么在index.html中需要它? b。)为什么在做这种事情的任何教程中都没有提到它? c。)是否有一种更简单的方法来使它正常工作(肯定有)?

0 个答案:

没有答案