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