Skip to content
This repository was archived by the owner on Jan 31, 2025. It is now read-only.

Commit 81d0327

Browse files
author
Daniel Brain
committed
Wait for document body and timeout before loading bridge
1 parent 8c57ee8 commit 81d0327

File tree

1 file changed

+32
-19
lines changed

1 file changed

+32
-19
lines changed

src/bridge/index.js

+32-19
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,22 @@ function getBridgeName(domain) {
1818
return id;
1919
}
2020

21-
function documentReady() {
22-
return new promise.Promise(resolve => {
21+
22+
let documentBodyReady = new promise.Promise(resolve => {
23+
24+
if (window.document && window.document.body) {
25+
return resolve(window.document.body);
26+
}
27+
28+
let interval = setInterval(() => {
2329
if (window.document && window.document.body) {
24-
return resolve(window.document);
30+
clearInterval(interval);
31+
return resolve(window.document.body);
2532
}
33+
}, 10);
34+
});
35+
2636

27-
window.document.addEventListener('DOMContentLoaded', event => {
28-
return resolve(window.document);
29-
});
30-
});
31-
}
3237

3338
function getRemoteBridgeForWindow(win) {
3439
try {
@@ -390,25 +395,33 @@ export function openBridge(url, domain) {
390395

391396
let iframe = openBridgeFrame(name, url);
392397

393-
return documentReady().then(document => {
394-
document.body.appendChild(iframe);
395-
396-
let bridge = iframe.contentWindow;
397-
398-
listenForRegister(bridge, domain);
398+
return documentBodyReady.then(body => {
399399

400400
return new promise.Promise((resolve, reject) => {
401401

402-
iframe.onload = resolve;
403-
iframe.onerror = reject;
402+
setTimeout(resolve, 1);
404403

405404
}).then(() => {
406405

407-
return onWindowReady(bridge, CONFIG.BRIDGE_TIMEOUT, `Bridge ${url}`);
406+
body.appendChild(iframe);
408407

409-
}).then(() => {
408+
let bridge = iframe.contentWindow;
409+
410+
listenForRegister(bridge, domain);
411+
412+
return new promise.Promise((resolve, reject) => {
413+
414+
iframe.onload = resolve;
415+
iframe.onerror = reject;
410416

411-
return bridge;
417+
}).then(() => {
418+
419+
return onWindowReady(bridge, CONFIG.BRIDGE_TIMEOUT, `Bridge ${url}`);
420+
421+
}).then(() => {
422+
423+
return bridge;
424+
});
412425
});
413426
});
414427
});

0 commit comments

Comments
 (0)