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