diff --git a/README.md b/README.md index eadf00c2..35140d47 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,3 @@ -# Looking for Maintainer(s) -I have been really busy and I can't continue maintaing this repo alone. I would like to ask if anyone wants to help I can grant a permission both on github and npm to start merging a lot of request and dealing with issues. - -Please send me your github and npm id so I can add you in. - -Thanks! - - ## Please take a look at this [issue](https://github.com/alinz/react-native-webview-bridge/issues/109) first # React Native WebView Javascript Bridge @@ -154,7 +146,7 @@ const injectScript = ` }()); `; -var Sample2 = React.createClass({ +var Sample2 = createReactClass({ onBridgeMessage(message){ const { webviewbridge } = this.refs; diff --git a/examples/SampleRN20/android/gradlew b/examples/SampleRN20/android/gradlew old mode 100755 new mode 100644 diff --git a/examples/SampleRN20/app.js b/examples/SampleRN20/app.js index 8e8b6748..dff44784 100644 --- a/examples/SampleRN20/app.js +++ b/examples/SampleRN20/app.js @@ -11,6 +11,7 @@ var { View, WebView } = React; +var createReactClass = require('create-react-class'); var WebViewBridge = require('react-native-webview-bridge'); @@ -29,7 +30,7 @@ const injectScript = ` }()); `; -var Sample2 = React.createClass({ +var Sample2 = createReactClass({ onBridgeMessage: function (message) { const { webviewbridge } = this.refs; diff --git a/ios/RCTWebViewBridge.m b/ios/RCTWebViewBridge.m index b8069a58..86ddabc4 100644 --- a/ios/RCTWebViewBridge.m +++ b/ios/RCTWebViewBridge.m @@ -99,7 +99,7 @@ - (void)sendToBridge:(NSString *)message } }()); ); - + // Escape singlequotes or messages containing ' will fail NSString *quotedMessage = [message stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"]; diff --git a/ios/RCTWebViewBridgeManager.h b/ios/RCTWebViewBridgeManager.h index 00578f3f..1a36ee7c 100644 --- a/ios/RCTWebViewBridgeManager.h +++ b/ios/RCTWebViewBridgeManager.h @@ -11,6 +11,9 @@ */ #import +#import +// #import // in forked https://github.com/lefnire/react-native-webview-bridge + @interface RCTWebViewBridgeManager : RCTViewManager diff --git a/ios/RCTWebViewBridgeManager.m b/ios/RCTWebViewBridgeManager.m index 3f3c6513..218cca0e 100644 --- a/ios/RCTWebViewBridgeManager.m +++ b/ios/RCTWebViewBridgeManager.m @@ -67,6 +67,11 @@ - (UIView *)view }; } ++ (BOOL)requiresMainQueueSetup +{ + return YES; +} + RCT_EXPORT_METHOD(goBack:(nonnull NSNumber *)reactTag) { [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) { @@ -81,8 +86,8 @@ - (UIView *)view RCT_EXPORT_METHOD(goForward:(nonnull NSNumber *)reactTag) { - [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) { - id view = viewRegistry[reactTag]; + [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) { + RCTWebViewBridge *view = viewRegistry[reactTag]; if (![view isKindOfClass:[RCTWebViewBridge class]]) { RCTLogError(@"Invalid view returned from registry, expecting RCTWebViewBridge, got: %@", view); } else { diff --git a/package.json b/package.json index cf2b3929..fe961cb9 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,9 @@ }, "homepage": "https://github.com/alinz/react-native-webview-bridge", "dependencies": { - "invariant": "2.2.0", + "create-react-class": "^15.6.0", + "invariant": "^2.2.2", "keymirror": "0.1.1", - "create-react-class": "15.6.3" + "prop-types": "^15.5.10" } } diff --git a/webview-bridge/index.android.js b/webview-bridge/index.android.js index 61030f0c..e9f5db4d 100644 --- a/webview-bridge/index.android.js +++ b/webview-bridge/index.android.js @@ -17,6 +17,7 @@ var React = require('react'); React.createClass = require('create-react-class'); var PropTypes = require('prop-types'); var ReactNative = require('react-native'); +var createReactClass = require('create-react-class'); var invariant = require('invariant'); var keyMirror = require('keymirror'); var resolveAssetSource = require('react-native/Libraries/Image/resolveAssetSource'); @@ -28,6 +29,7 @@ var { StyleSheet, Text, View, + ViewPropTypes, WebView, requireNativeComponent, DeviceEventEmitter, @@ -50,7 +52,7 @@ var RCTWebViewBridge = requireNativeComponent('RCTWebViewBridge', WebViewBridge) /** * Renders a native WebView. */ -var WebViewBridge = React.createClass({ +var WebViewBridge = createReactClass({ propTypes: { ...RCTWebViewBridge.propTypes, diff --git a/webview-bridge/index.ios.js b/webview-bridge/index.ios.js index 2c933991..4e1db351 100644 --- a/webview-bridge/index.ios.js +++ b/webview-bridge/index.ios.js @@ -18,6 +18,7 @@ var React = require('react'); React.createClass = require('create-react-class'); var PropTypes = require('prop-types'); var ReactNative = require('react-native'); +var createReactClass = require('create-react-class'); var invariant = require('invariant'); var keyMirror = require('keymirror'); var resolveAssetSource = require('react-native/Libraries/Image/resolveAssetSource'); @@ -28,12 +29,13 @@ var { StyleSheet, Text, View, + ViewPropTypes, WebView, requireNativeComponent, UIManager, NativeModules: { - WebViewBridgeManager - } + WebViewBridgeManager, + }, } = ReactNative; var { PropTypes } = PropTypes; @@ -92,7 +94,7 @@ var defaultRenderError = (errorDomain, errorCode, errorDesc) => ( /** * Renders a native WebView. */ -var WebViewBridge = React.createClass({ +var WebViewBridge = createReactClass({ statics: { JSNavigationScheme: JSNavigationScheme, NavigationType: NavigationType, @@ -174,9 +176,10 @@ var WebViewBridge = React.createClass({ const onBridgeMessageCallback = this.props.onBridgeMessage; if (onBridgeMessageCallback) { const messages = event.nativeEvent.messages; - messages.forEach((message) => { - onBridgeMessageCallback(message); - }); + if (messages && typeof messages.forEach === "function") + messages.forEach((message) => { + onBridgeMessageCallback(message); + }); } }; @@ -263,7 +266,7 @@ var WebViewBridge = React.createClass({ this.setState({ lastErrorEvent: event.nativeEvent, - viewState: WebViewBridgeState.ERROR + viewState: WebViewBridgeState.ERROR, }); }, @@ -318,7 +321,7 @@ var styles = StyleSheet.create({ }, webView: { backgroundColor: '#ffffff', - } + }, }); module.exports = WebViewBridge; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..846d6432 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,109 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +create-react-class@^15.6.0: + version "15.6.2" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +fbjs@^0.8.16, fbjs@^0.8.9: + version "0.8.16" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +iconv-lite@~0.4.13: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +invariant@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +js-tokens@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +keymirror@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/keymirror/-/keymirror-0.1.1.tgz#918889ea13f8d0a42e7c557250eee713adc95c35" + +loose-envify@^1.0.0, loose-envify@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +prop-types@^15.5.10: + version "15.6.0" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +ua-parser-js@^0.7.9: + version "0.7.17" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" + +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"