Skip to content

Commit 32219e5

Browse files
committed
Disable IE innerHTML workaround behind a flag
We don't need this workaround for SVG anymore and we don't need to workaround MSApp's security model since Windows 10.
1 parent 21aee59 commit 32219e5

9 files changed

+23
-3
lines changed

packages/react-dom-bindings/src/client/ReactDOMComponent.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ import {
7474
enableCustomElementPropertySupport,
7575
enableClientRenderFallbackOnTextMismatch,
7676
enableHostSingletons,
77+
disableIEWorkarounds,
7778
} from 'shared/ReactFeatureFlags';
7879
import {
7980
mediaEventTypes,
@@ -132,7 +133,8 @@ if (__DEV__) {
132133
// normalized. Since it only affects IE, we're skipping style warnings
133134
// in that browser completely in favor of doing all that work.
134135
// See https://github.com/facebook/react/issues/11807
135-
canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode;
136+
canDiffStyleForHydrationWarning =
137+
disableIEWorkarounds || (canUseDOM && !document.documentMode);
136138

137139
warnForPropDifference = function (
138140
propName: string,
@@ -308,7 +310,11 @@ function setInitialDOMProperties(
308310
} else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
309311
const nextHtml = nextProp ? nextProp[HTML] : undefined;
310312
if (nextHtml != null) {
311-
setInnerHTML(domElement, nextHtml);
313+
if (disableIEWorkarounds) {
314+
domElement.innerHTML = nextHtml;
315+
} else {
316+
setInnerHTML(domElement, nextHtml);
317+
}
312318
}
313319
} else if (propKey === CHILDREN) {
314320
if (typeof nextProp === 'string') {
@@ -366,7 +372,11 @@ function updateDOMProperties(
366372
if (propKey === STYLE) {
367373
setValueForStyles(domElement, propValue);
368374
} else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
369-
setInnerHTML(domElement, propValue);
375+
if (disableIEWorkarounds) {
376+
domElement.innerHTML = propValue;
377+
} else {
378+
setInnerHTML(domElement, propValue);
379+
}
370380
} else if (propKey === CHILDREN) {
371381
setTextContent(domElement, propValue);
372382
} else {

packages/shared/ReactFeatureFlags.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,9 @@ export const enableTrustedTypesIntegration = false;
169169
// DOM properties
170170
export const disableInputAttributeSyncing = false;
171171

172+
// Remove IE and MsApp specific workarounds for innerHTML
173+
export const disableIEWorkarounds = __EXPERIMENTAL__;
174+
172175
// Filter certain DOM attributes (e.g. src, href) if their values are empty
173176
// strings. This prevents e.g. <img src=""> from making an unnecessary HTTP
174177
// request for certain browsers.

packages/shared/forks/ReactFeatureFlags.native-fb.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export const debugRenderPhaseSideEffectsForStrictMode = true;
3636
export const disableJavaScriptURLs = false;
3737
export const disableCommentsAsDOMContainers = true;
3838
export const disableInputAttributeSyncing = false;
39+
export const disableIEWorkarounds = true;
3940
export const replayFailedUnitOfWorkWithInvokeGuardedCallback = __DEV__;
4041
export const enableScopeAPI = false;
4142
export const enableCreateEventHandleAPI = false;

packages/shared/forks/ReactFeatureFlags.native-oss.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export const enableFetchInstrumentation = false;
2626
export const disableJavaScriptURLs = false;
2727
export const disableCommentsAsDOMContainers = true;
2828
export const disableInputAttributeSyncing = false;
29+
export const disableIEWorkarounds = true;
2930
export const enableSchedulerDebugging = false;
3031
export const enableScopeAPI = false;
3132
export const enableCreateEventHandleAPI = false;

packages/shared/forks/ReactFeatureFlags.test-renderer.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export const enableFetchInstrumentation = true;
2626
export const disableJavaScriptURLs = false;
2727
export const disableCommentsAsDOMContainers = true;
2828
export const disableInputAttributeSyncing = false;
29+
export const disableIEWorkarounds = true;
2930
export const enableSchedulerDebugging = false;
3031
export const enableScopeAPI = false;
3132
export const enableCreateEventHandleAPI = false;

packages/shared/forks/ReactFeatureFlags.test-renderer.native.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export const enableFetchInstrumentation = false;
2626
export const disableJavaScriptURLs = false;
2727
export const disableCommentsAsDOMContainers = true;
2828
export const disableInputAttributeSyncing = false;
29+
export const disableIEWorkarounds = true;
2930
export const enableSchedulerDebugging = false;
3031
export const enableScopeAPI = false;
3132
export const enableCreateEventHandleAPI = false;

packages/shared/forks/ReactFeatureFlags.test-renderer.www.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export const enableSchedulerDebugging = false;
2727
export const disableJavaScriptURLs = false;
2828
export const disableCommentsAsDOMContainers = true;
2929
export const disableInputAttributeSyncing = false;
30+
export const disableIEWorkarounds = true;
3031
export const enableScopeAPI = true;
3132
export const enableCreateEventHandleAPI = false;
3233
export const enableSuspenseCallback = true;

packages/shared/forks/ReactFeatureFlags.www-dynamic.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
// with the __VARIANT__ set to `true`, and once set to `false`.
1515

1616
export const disableInputAttributeSyncing = __VARIANT__;
17+
export const disableIEWorkarounds = __VARIANT__;
1718
export const enableFilterEmptyStringAttributesDOM = __VARIANT__;
1819
export const enableLegacyFBSupport = __VARIANT__;
1920
export const skipUnmountedBoundaries = __VARIANT__;

packages/shared/forks/ReactFeatureFlags.www.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const dynamicFeatureFlags: DynamicFeatureFlags = require('ReactFeatureFlags');
1616

1717
export const {
1818
disableInputAttributeSyncing,
19+
disableIEWorkarounds,
1920
enableTrustedTypesIntegration,
2021
disableSchedulerTimeoutBasedOnReactExpirationTime,
2122
replayFailedUnitOfWorkWithInvokeGuardedCallback,

0 commit comments

Comments
 (0)