Skip to content

Commit 3c83ad1

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 3c83ad1

9 files changed

+22
-3
lines changed

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

Lines changed: 12 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,7 @@ 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 = (disableIEWorkArounds || (canUseDOM && !document.documentMode));
136137

137138
warnForPropDifference = function (
138139
propName: string,
@@ -308,7 +309,11 @@ function setInitialDOMProperties(
308309
} else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
309310
const nextHtml = nextProp ? nextProp[HTML] : undefined;
310311
if (nextHtml != null) {
311-
setInnerHTML(domElement, nextHtml);
312+
if (disableIEWorkArounds) {
313+
domElement.innerHTML = nextHtml;
314+
} else {
315+
setInnerHTML(domElement, nextHtml);
316+
}
312317
}
313318
} else if (propKey === CHILDREN) {
314319
if (typeof nextProp === 'string') {
@@ -366,7 +371,11 @@ function updateDOMProperties(
366371
if (propKey === STYLE) {
367372
setValueForStyles(domElement, propValue);
368373
} else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
369-
setInnerHTML(domElement, propValue);
374+
if (disableIEWorkArounds) {
375+
domElement.innerHTML = propValue;
376+
} else {
377+
setInnerHTML(domElement, propValue);
378+
}
370379
} else if (propKey === CHILDREN) {
371380
setTextContent(domElement, propValue);
372381
} 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)