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

2 files changed

Lines changed: 28 additions & 12 deletions

File tree

‎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+
}elseif(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+
constscript=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_createRootascreateRoot,flushSync}from'react-dom';
55
importBridgefrom'react-devtools-shared/src/bridge';
66
importStorefrom'react-devtools-shared/src/devtools/store';
7-
importinjectfrom'./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
constviewElementSourceFunction=createViewElementSource(
141147
bridge,

0 commit comments

Comments
 (0)