【发布时间】:2018-03-05 15:33:36
【问题描述】:
我目前在开发 Chrome 扩展程序时遇到了问题。此扩展用于基于 ReactJS 的网站。我需要从页面中删除一些数据。他就是这个页面的一个例子。
<div class="UserWallet">
<tbody>
<tr class"Trans"><td>...</td></tr>
...
<tbody>
</div>
当我使用 Chrome 检查器时,我可以看到我的 div class="UserWallet"> 有一个属性 __reactInternalInstance。我找到了一个函数findReact(element) 用于获取 React Instance。此功能用于另一个名为 Steemit-More-Info 的 Chrome 扩展程序。我有完全相同的功能,并使用相同的 HTML 元素作为参数,但我的功能不起作用。当我执行$(".UserWallet)" 时,结果不包含__reactInternalInstance 属性。但在另一个扩展中,它使用相同的 JQuery 代码和相同的 findReact 函数。
这里是 findReact 的代码。
var findReact = function(dom) {
for (var key in dom) {
if (key.startsWith("__reactInternalInstance$")) {
var compInternals = dom[key]._currentElement;
var compWrapper = compInternals._owner;
var comp = compWrapper._instance;
return comp;
}
}
return null;
};
有人遇到过这个问题吗?是否需要在我的扩展中包含一个特殊的库才能废弃 reactInstance?
谢谢,
cedric_g
【问题讨论】:
-
没有
jQuery的$在控制台中是不同的(它返回一个HTML 元素)和带有jQuery 的$是不同的。您应该确保如果它是jQuery,那么您首先获取元素,然后检查__reactInternalInstance$。 @mrmusicman -
由于 React 16+ 您的 findReact 代码将无法工作,因为内部属性名称已更改。您可以在此处尝试我的回答中的功能:(updated to work for React <16 and 16+)
标签: javascript reactjs google-chrome-extension web-scraping