From 67931284350ebd2b60d1e11870690272079b1726 Mon Sep 17 00:00:00 2001 From: odino Date: Thu, 31 Dec 2015 18:03:37 -0800 Subject: [PATCH] Allowing turning on / off DOM storage on android webviews Summary: Was developing on a WebView and couldnt get it to run. Turns out its JS code mostly depends on `localStorage` and I realized it wasnt turned on in RN. This PR adds a prop, similar to `javascriptEnabledAndroid` to be able to turn DOM storage on / off. TBH I dont really know how it works on IOS, so I created an android specific thingy. I assume DOM storage is enabled by default on IOS. Closes https://github.com/facebook/react-native/pull/5065 Reviewed By: svcscm Differential Revision: D2797735 Pulled By: androidtrunkagent fb-gh-sync-id: cd60cfa4d24d80fb82e4f54f387a4517a99e75ab --- Examples/UIExplorer/WebViewExample.js | 1 + Libraries/Components/WebView/WebView.android.js | 9 ++++++++- Libraries/Components/WebView/WebView.ios.js | 6 ++++++ .../react/views/webview/ReactWebViewManager.java | 5 +++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Examples/UIExplorer/WebViewExample.js b/Examples/UIExplorer/WebViewExample.js index c8c547f97..ce489effe 100644 --- a/Examples/UIExplorer/WebViewExample.js +++ b/Examples/UIExplorer/WebViewExample.js @@ -95,6 +95,7 @@ var WebViewExample = React.createClass({ style={styles.webView} url={this.state.url} javaScriptEnabledAndroid={true} + domStorageEnabledAndroid={true} onNavigationStateChange={this.onNavigationStateChange} onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest} startInLoadingState={true} diff --git a/Libraries/Components/WebView/WebView.android.js b/Libraries/Components/WebView/WebView.android.js index f4bc52045..7b227aef3 100644 --- a/Libraries/Components/WebView/WebView.android.js +++ b/Libraries/Components/WebView/WebView.android.js @@ -38,7 +38,7 @@ var WebView = React.createClass({ propTypes: { ...View.propTypes, - renderError: PropTypes.func, + renderError: PropTypes.func, renderLoading: PropTypes.func, url: PropTypes.string, html: PropTypes.string, @@ -54,6 +54,12 @@ var WebView = React.createClass({ */ javaScriptEnabledAndroid: PropTypes.bool, + /** + * Used on Android only, controls whether DOM Storage is enabled or not + * @platform android + */ + domStorageEnabledAndroid: PropTypes.bool, + /** * Sets the JS to be injected when the webpage loads. */ @@ -117,6 +123,7 @@ var WebView = React.createClass({ injectedJavaScript={this.props.injectedJavaScript} userAgent={this.props.userAgent} javaScriptEnabledAndroid={this.props.javaScriptEnabledAndroid} + domStorageEnabledAndroid={this.props.domStorageEnabledAndroid} contentInset={this.props.contentInset} automaticallyAdjustContentInsets={this.props.automaticallyAdjustContentInsets} onLoadingStart={this.onLoadingStart} diff --git a/Libraries/Components/WebView/WebView.ios.js b/Libraries/Components/WebView/WebView.ios.js index a51ed3fce..6713c84c9 100644 --- a/Libraries/Components/WebView/WebView.ios.js +++ b/Libraries/Components/WebView/WebView.ios.js @@ -116,6 +116,12 @@ var WebView = React.createClass({ */ javaScriptEnabledAndroid: PropTypes.bool, + /** + * Used on Android only, controls whether DOM Storage is enabled or not + * @platform android + */ + domStorageEnabledAndroid: PropTypes.bool, + /** * Sets the JS to be injected when the webpage loads. */ diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java index a8eb4d65b..57c2d09e3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java @@ -256,6 +256,11 @@ public class ReactWebViewManager extends SimpleViewManager { view.getSettings().setJavaScriptEnabled(enabled); } + @ReactProp(name = "domStorageEnabledAndroid") + public void setDomStorageEnabled(WebView view, boolean enabled) { + view.getSettings().setDomStorageEnabled(enabled); + } + @ReactProp(name = "userAgent") public void setUserAgent(WebView view, @Nullable String userAgent) { if (userAgent != null) {