diff --git a/app/assets/javascripts/discourse/app/instance-initializers/webview-background.js b/app/assets/javascripts/discourse/app/instance-initializers/webview-background.js index 30dc5cfe7f0..07bdae4780f 100644 --- a/app/assets/javascripts/discourse/app/instance-initializers/webview-background.js +++ b/app/assets/javascripts/discourse/app/instance-initializers/webview-background.js @@ -4,6 +4,7 @@ import discourseLater from "discourse-common/lib/later"; // Send bg color to webview so iOS status bar matches site theme export default { after: "inject-objects", + retryCount: 0, initialize(owner) { const caps = owner.lookup("service:capabilities"); @@ -15,19 +16,27 @@ export default { } }, - teardown() { - window - .matchMedia("(prefers-color-scheme: dark)") - .removeEventListener("change", this.updateAppBackground); + updateAppBackground(delay = 500) { + discourseLater(() => { + if (this.headerBgColor()) { + postRNWebviewMessage("headerBg", this.headerBgColor()); + } else { + this.retry(); + } + }, delay); }, - updateAppBackground() { - discourseLater(() => { - const header = document.querySelector(".d-header-wrap .d-header"); - if (header) { - const styles = window.getComputedStyle(header); - postRNWebviewMessage("headerBg", styles.backgroundColor); - } - }, 500); + headerBgColor() { + const header = document.querySelector(".d-header-wrap .d-header"); + if (header) { + return window.getComputedStyle(header)?.backgroundColor; + } + }, + + retry() { + if (this.retryCount < 2) { + this.retryCount++; + this.updateAppBackground(1000); + } }, };