Skip to content

Commit 68d39c2

Browse files
committed
Merge branch 'feature/add-event' into develop
2 parents 5826145 + 2e76ffa commit 68d39c2

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

README.md

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,17 +86,33 @@ This example can be found in `examples` folder.
8686

8787
```js
8888
const injectScript = `
89-
(function () {
90-
if (WebViewBridge) {
89+
function webViewBridgeReady(cb) {
90+
//checks whether WebViewBirdge exists in global scope.
91+
if (window.WebViewBridge) {
92+
cb(window.WebViewBridge);
93+
return;
94+
}
9195
92-
WebViewBridge.onMessage = function (message) {
93-
alert('got a message from Native: ' + message);
96+
function handler() {
97+
//remove the handler from listener since we don't need it anymore
98+
document.removeEventListener('WebViewBridge', handler, false);
99+
//pass the WebViewBridge object to the callback
100+
cb(window.WebViewBridge);
101+
}
94102
95-
WebViewBridge.send("message from webview");
96-
};
103+
//if WebViewBridge doesn't exist in global scope attach itself to document
104+
//event system. Once the code is being injected by extension, the handler will
105+
//be called.
106+
document.addEventListener('WebViewBridge', handler, false);
107+
}
97108
98-
}
99-
}());
109+
webViewBridgeReady(function (webViewBridge) {
110+
WebViewBridge.onMessage = function (message) {
111+
alert('got a message from Native: ' + message);
112+
113+
WebViewBridge.send("message from webview");
114+
};
115+
});
100116
`;
101117

102118
var Sample2 = React.createClass({

ios/RCTWebViewBridge.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,8 @@ - (NSString *)webViewBridgeScript {
286286
var RNWBSchema = 'wvb';
287287
var sendQueue = [];
288288
var receiveQueue = [];
289+
var doc = window.document;
290+
var customEvent = doc.createEvent('Event');
289291

290292
function callFunc(func, message) {
291293
if ('function' === typeof func) {
@@ -340,6 +342,10 @@ function signalNative() {
340342
};
341343

342344
window.WebViewBridge = WebViewBridge;
345+
346+
//dispatch event
347+
customEvent.initEvent('WebViewBridge', true, true);
348+
doc.dispatchEvent(customEvent);
343349
}(window));
344350
);
345351
}

scripts/webviewbridge.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
var RNWBSchema = 'wvb';
1010
var sendQueue = [];
1111
var receiveQueue = [];
12+
var doc = window.document;
13+
var customEvent = doc.createEvent('Event');
1214

1315
function callFunc(func, message) {
1416
if ('function' === typeof func) {
@@ -63,4 +65,8 @@
6365
};
6466

6567
window.WebViewBridge = WebViewBridge;
68+
69+
//dispatch event
70+
customEvent.initEvent('WebViewBridge', true, true);
71+
doc.dispatchEvent(customEvent);
6672
}(window));

0 commit comments

Comments
 (0)