From 274a3e05858a51af3d0eb8bdea2f7975f7f61169 Mon Sep 17 00:00:00 2001 From: Horcrux Date: Fri, 15 Jan 2016 09:30:47 -0800 Subject: [PATCH] add onLoading* prop for WebView Summary: add onLoadingStart,onLoadingError,onLoadingFinish prop for WebView Closes https://github.com/facebook/react-native/pull/5335 Reviewed By: svcscm Differential Revision: D2834003 Pulled By: nicklockwood fb-gh-sync-id: bbe84297ebeb5a6c2bf1caaacee8c59e0bcef1db --- .../Components/WebView/WebView.android.js | 12 ++++++++++ Libraries/Components/WebView/WebView.ios.js | 24 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/Libraries/Components/WebView/WebView.android.js b/Libraries/Components/WebView/WebView.android.js index 19e1a4f1a..f7b0a88ef 100644 --- a/Libraries/Components/WebView/WebView.android.js +++ b/Libraries/Components/WebView/WebView.android.js @@ -40,6 +40,10 @@ var WebView = React.createClass({ ...View.propTypes, renderError: PropTypes.func, renderLoading: PropTypes.func, + onLoad: PropTypes.func, + onLoadEnd: PropTypes.func, + onLoadStart: PropTypes.func, + onError: PropTypes.func, url: PropTypes.string, html: PropTypes.string, automaticallyAdjustContentInsets: PropTypes.bool, @@ -189,11 +193,16 @@ var WebView = React.createClass({ }, onLoadingStart: function(event) { + var onLoadStart = this.props.onLoadStart; + onLoadStart && onLoadStart(event); this.updateNavigationState(event); }, onLoadingError: function(event) { event.persist(); // persist this event because we need to store it + var {onError, onLoadEnd} = this.props; + onError && onError(event); + onLoadEnd && onLoadEnd(event); console.error('Encountered an error loading page', event.nativeEvent); this.setState({ @@ -203,6 +212,9 @@ var WebView = React.createClass({ }, onLoadingFinish: function(event) { + var {onLoad, onLoadEnd} = this.props; + onLoad && onLoad(event); + onLoadEnd && onLoadEnd(event); this.setState({ viewState: WebViewState.IDLE, }); diff --git a/Libraries/Components/WebView/WebView.ios.js b/Libraries/Components/WebView/WebView.ios.js index d97326667..ea49044e1 100644 --- a/Libraries/Components/WebView/WebView.ios.js +++ b/Libraries/Components/WebView/WebView.ios.js @@ -97,6 +97,22 @@ var WebView = React.createClass({ * Function that returns a loading indicator. */ renderLoading: PropTypes.func, + /** + * Invoked when load finish + */ + onLoad: PropTypes.func, + /** + * Invoked when load either succeeds or fails + */ + onLoadEnd: PropTypes.func, + /** + * Invoked on load start + */ + onLoadStart: PropTypes.func, + /** + * Invoked when load fails + */ + onError: PropTypes.func, /** * @platform ios */ @@ -279,11 +295,16 @@ var WebView = React.createClass({ }, onLoadingStart: function(event: Event) { + var onLoadStart = this.props.onLoadStart; + onLoadStart && onLoadStart(event); this.updateNavigationState(event); }, onLoadingError: function(event: Event) { event.persist(); // persist this event because we need to store it + var {onError, onLoadEnd} = this.props; + onError && onError(event); + onLoadEnd && onLoadEnd(event); console.warn('Encountered an error loading page', event.nativeEvent); this.setState({ @@ -293,6 +314,9 @@ var WebView = React.createClass({ }, onLoadingFinish: function(event: Event) { + var {onLoad, onLoadEnd} = this.props; + onLoad && onLoad(event); + onLoadEnd && onLoadEnd(event); this.setState({ viewState: WebViewState.IDLE, });