Skip to content

Commit 4290967

Browse files
author
Brian Vaughn
committed
Merge branch 'tt-compat' of https://github.com/onionymous/react into onionymous-tt-compat
2 parents 3a49dff + f09854a commit 4290967

File tree

2 files changed

+28
-12
lines changed

2 files changed

+28
-12
lines changed

packages/react-devtools-extensions/src/injectGlobalHook.js

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,26 @@ let lastDetectionResult;
2424
// So instead, the hook will use postMessage() to pass message to us here.
2525
// And when this happens, we'll send a message to the "background page".
2626
window.addEventListener('message', function(evt) {
27-
if (
28-
evt.source === window &&
29-
evt.data &&
30-
evt.data.source === 'react-devtools-detector'
31-
) {
32-
lastDetectionResult = {
33-
hasDetectedReact: true,
34-
reactBuildType: evt.data.reactBuildType,
35-
};
36-
chrome.runtime.sendMessage(lastDetectionResult);
27+
if (evt.source === window && evt.data) {
28+
if (evt.data.source === 'react-devtools-detector') {
29+
lastDetectionResult = {
30+
hasDetectedReact: true,
31+
reactBuildType: evt.data.reactBuildType,
32+
};
33+
chrome.runtime.sendMessage(lastDetectionResult);
34+
} else if (evt.data.source === 'react-devtools-inject-backend') {
35+
// The backend is injected by the content script to avoid CSP and Trusted Types violations,
36+
// since content scripts can modify the DOM and are not subject to the page's policies.
37+
// The prototype stuff is in case document.createElement has been modified.
38+
const script = document.constructor.prototype.createElement.call(
39+
document,
40+
'script',
41+
);
42+
script.src = chrome.runtime.getURL('build/backend.js');
43+
script.charset = 'utf-8';
44+
document.documentElement.appendChild(script);
45+
script.parentNode.removeChild(script);
46+
}
3747
}
3848
});
3949

packages/react-devtools-extensions/src/main.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {createElement} from 'react';
44
import {unstable_createRoot as createRoot, flushSync} from 'react-dom';
55
import Bridge from 'react-devtools-shared/src/bridge';
66
import Store from 'react-devtools-shared/src/devtools/store';
7-
import inject from './inject';
87
import {
98
createViewElementSource,
109
getBrowserName,
@@ -135,7 +134,14 @@ function createPanelIfReactLoaded() {
135134

136135
// Initialize the backend only once the Store has been initialized.
137136
// Otherwise the Store may miss important initial tree op codes.
138-
inject(chrome.runtime.getURL('build/backend.js'));
137+
chrome.devtools.inspectedWindow.eval(
138+
`window.postMessage({ source: 'react-devtools-inject-backend' });`,
139+
function(response, evalError) {
140+
if (evalError) {
141+
console.log(evalError);
142+
}
143+
},
144+
);
139145

140146
const viewElementSourceFunction = createViewElementSource(
141147
bridge,

0 commit comments

Comments
 (0)