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()); }