mirror of
https://github.com/status-im/react-native-webview-bridge.git
synced 2026-08-31 13:21:15 +00:00
Merge pull request #273 from fungilation/master
Fixes #272: messages.forEach is not a function
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:(NSCoder *)aDecoder)
|
||||
}
|
||||
}());
|
||||
);
|
||||
|
||||
|
||||
// Escape singlequotes or messages containing ' will fail
|
||||
NSString *quotedMessage = [message stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"];
|
||||
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
*/
|
||||
|
||||
#import <React/RCTViewManager.h>
|
||||
#import <React/RCTUIManager.h>
|
||||
// #import <React/RCTBridge.h> // in forked https://github.com/lefnire/react-native-webview-bridge
|
||||
|
||||
|
||||
@interface RCTWebViewBridgeManager : RCTViewManager
|
||||
|
||||
|
||||
@@ -67,6 +67,11 @@ RCT_EXPORT_VIEW_PROPERTY(onBridgeMessage, RCTDirectEventBlock)
|
||||
};
|
||||
}
|
||||
|
||||
+ (BOOL)requiresMainQueueSetup
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(goBack:(nonnull NSNumber *)reactTag)
|
||||
{
|
||||
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RCTWebViewBridge *> *viewRegistry) {
|
||||
@@ -81,8 +86,8 @@ RCT_EXPORT_METHOD(goBack:(nonnull NSNumber *)reactTag)
|
||||
|
||||
RCT_EXPORT_METHOD(goForward:(nonnull NSNumber *)reactTag)
|
||||
{
|
||||
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
|
||||
id view = viewRegistry[reactTag];
|
||||
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RCTWebViewBridge *> *viewRegistry) {
|
||||
RCTWebViewBridge *view = viewRegistry[reactTag];
|
||||
if (![view isKindOfClass:[RCTWebViewBridge class]]) {
|
||||
RCTLogError(@"Invalid view returned from registry, expecting RCTWebViewBridge, got: %@", view);
|
||||
} else {
|
||||
|
||||
+3
-2
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user