2

我想创建一个扩展的铬,其中突变的Facebook时间轴的DOM。 Chrome扩展不能注入var或功能创建的页面: https://developer.chrome.com/extensions/content_scripts#execution-environmentChrome扩展突变运行反应应用程序

因此,它可能改变反应应用程序的渲染?我试图手动更改文本:

var elements = document.querySelectorAll('.UFILikeLink'); 
for (var i = 0; i < elements.length; i++) { 
    var element = elements[i]; 
    element.innerHTML = element.innerHTML.replace(/Like/g, 'ORly?'); 
} 

但事后状的部分休息,当我改变反应也如预期一样的文字。任何提示或可能改变反应DOM没有打破整个应用程序?

回答

0

React不允许您手动修改DOM,直到它没有明确指定(并且不是您的情况)。

更改组件的DOM表示形式的唯一方法是更改​​其render()方法。为此,您必须在页面的运行JavaScript中更改函数。

不幸的是(或者幸运的是),由于安全政策和JavaScript代码的沙箱问题,Chrome扩展程序未对其进行授权。

这应该是谷歌官方对这个问题的回答。但是,您可以通过在您的JavaScript代码中注入一个<script>标记来突破这一保护,从而在Facebook页面的DOM中改变ReactCompenent行为。这将强制浏览器在主机页面JavaScript VM中执行此代码。我不知道是否可以在React初始化后更改组件的render()函数,但这是您执行所需操作的唯一希望。

让我们知道如果您找到了解决方案,知道React是否能够抵御此类入侵可能很有趣。

+0

反应,可以与'__REACT_DEVTOOLS_GLOBAL_HOOK__'沟通,就像react-devtools一样,但对我的问题来说太难了。我想我会以另一种方式来做,或者根本就不做。 https://github.com/facebook/react-devtools :)中有很多信息 – huv1k