From 700ea4c282fecd92781fcd5c659e53c054e9dc2d Mon Sep 17 00:00:00 2001 From: ansuz Date: Tue, 17 Nov 2020 20:25:12 +0530 Subject: [PATCH] minimal patch and an ominous warning comment --- www/common/cryptpad-common.js | 42 +++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/www/common/cryptpad-common.js b/www/common/cryptpad-common.js index 2aaa50796..9a9807e7e 100644 --- a/www/common/cryptpad-common.js +++ b/www/common/cryptpad-common.js @@ -2057,26 +2057,34 @@ define([ var userHash; - Nthen(function () { - var getLogElement = function () { - var logger = document.createElement('div'); - logger.setAttribute('id', 'cp-logger'); - document.body.appendChild(logger); - var css = function(){/* #cp-logger { display: none; } */}.toString().slice(14, -3); + (function iOSFirefoxFix () { +/* + For some bizarre reason Firefox on iOS throws an error during the + loading process unless we call this function. Drawing these elements + to the DOM presumably causes the JS engine to wait just a little bit longer + until some APIs we need are ready. This occurs despite all this code being + run after the usual dom-ready events. This fix was discovered while trying + to log the error messages to the DOM because it's extremely difficult + to debug Firefox iOS in the usual ways. In summary, computers are terrible. +*/ + try { var style = document.createElement('style'); - style.type = 'text/css'; - style.appendChild(document.createTextNode(css)); + style.type = 'text/css'; + style.appendChild(document.createTextNode('#cp-logger { display: none; }')); document.head.appendChild(style); - return logger; - }; - var logToDom = function () { + + var logger = document.createElement('div'); + logger.setAttribute('id', 'cp-logger'); + document.body.appendChild(logger); + var pre = document.createElement('pre'); - pre.innerText = 'x'; - getLogElement(); - getLogElement().appendChild(pre); - }; - logToDom(); - }).nThen(function (waitFor) { + pre.innerText = 'x'; + pre.style.display = 'none'; + logger.appendChild(pre); + } catch (err) { console.error(err); } + }()); + + Nthen(function (waitFor) { if (AppConfig.beforeLogin) { AppConfig.beforeLogin(LocalStore.isLoggedIn(), waitFor()); }