diff --git a/Clipper/joplin-webclipper/popup/src/bridge.js b/Clipper/joplin-webclipper/popup/src/bridge.js index 7af1e05c3f..1b4938d6c4 100644 --- a/Clipper/joplin-webclipper/popup/src/bridge.js +++ b/Clipper/joplin-webclipper/popup/src/bridge.js @@ -2,7 +2,7 @@ const randomClipperPort = require('./randomClipperPort'); class Bridge { - init(browser, browserSupportsPromises, dispatch) { + async init(browser, browserSupportsPromises, dispatch) { console.info('Popup: Init bridge'); this.browser_ = browser; @@ -36,7 +36,7 @@ class Bridge { this.browser_.runtime.onMessage.addListener(this.browser_notify); - const backgroundPage = this.browser_.extension.getBackgroundPage(); + const backgroundPage = await this.backgroundPage(this.browser_); // Not sure why the getBackgroundPage() sometimes returns null, so // in that case default to "prod" environment, which means the live @@ -53,6 +53,17 @@ class Bridge { this.findClipperServerPort(); } + async backgroundPage(browser) { + const bgp = browser.extension.getBackgroundPage(); + if (bgp) return bgp; + + return new Promise((resolve, reject) => { + browser.runtime.getBackgroundPage((bgp) => { + resolve(bgp); + }) + }); + } + env() { return this.env_; } diff --git a/Clipper/joplin-webclipper/popup/src/index.js b/Clipper/joplin-webclipper/popup/src/index.js index 1aaae950bd..7b5117abba 100644 --- a/Clipper/joplin-webclipper/popup/src/index.js +++ b/Clipper/joplin-webclipper/popup/src/index.js @@ -88,11 +88,19 @@ function reducer(state = defaultState, action) { return newState; } -const store = createStore(reducer, applyMiddleware(reduxMiddleware)); +async function main() { + const store = createStore(reducer, applyMiddleware(reduxMiddleware)); -bridge().init(window.browser ? window.browser : window.chrome, !!window.browser, store.dispatch); -bridge().restoreState(); + console.info('Popup: Init bridge and restore state...'); -console.info('Popup: Creating React app...'); + await bridge().init(window.browser ? window.browser : window.chrome, !!window.browser, store.dispatch); + bridge().restoreState(); -ReactDOM.render(, document.getElementById('root')); + console.info('Popup: Creating React app...'); + + ReactDOM.render(, document.getElementById('root')); +} + +main().catch((error) => { + console.error('Fatal error on initialisation:', error); +}); \ No newline at end of file