Chrome 扩展变异运行反应应用程序

Posted

技术标签:

【中文标题】Chrome 扩展变异运行反应应用程序【英文标题】:Chrome extension mutating running react application 【发布时间】:2016-08-17 23:27:52 【问题描述】:

我正在尝试为 chrome 创建扩展,它会改变 facebook 时间轴的 DOM。 Chrome 扩展无法注入到页面创建的 var 或函数: https://developer.chrome.com/extensions/content_scripts#execution-environment

那么它可能改变 React 应用程序的渲染?我正在尝试手动更改文本:

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?');

但之后 Like 组件中断,当我更改反应时,会出现与预期相同的文本。有什么提示或者可以在不破坏整个应用程序的情况下更改反应 DOM?

【问题讨论】:

【参考方案1】:

在没有明确指定之前,React 根本不允许您手动改变 DOM(而且您的情况并非如此)。

改变组件的DOM表示的唯一方法是改变他的render()方法。为此,您必须在页面的运行 javascript 中更改一个函数。

很遗憾(或幸运地),由于安全政策和 JavaScript 代码的沙盒化,Chrome 扩展程序未授权。

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

如果您找到了解决方案,请告诉我们,了解 React 是否可以防止此类入侵可能会很有趣。

【讨论】:

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

以上是关于Chrome 扩展变异运行反应应用程序的主要内容,如果未能解决你的问题,请参考以下文章

反应开发工具未在 Chrome 浏览器中加载

chrome浏览器中选项设置中有一个“关闭Google Chrome 浏览器后继续运行后台应用程序”,这个最好怎么设置?

使用可点击的网页链接启动/激活/运行 Chrome 扩展程序?

谷歌浏览器安装没反应

在模拟器/设备上/使用或不使用 Chrome 调试时反应本机行为不同

chrome扩展程序开发之在目标页面运行自己的JS