Столкнулся с проблемой, при которой выполнение кода у пользователей iOS останавливается, когда интерпретатор доходит до начала кода Яндекс.Метрики и/или Google Analytics.
HTML следующий:
...
<script src="/js/common.js">...
<script src="/js/stats.js">...
...
В common.js создаются текстовые поля, точнее не успеют создаться. В stats.js содержится следующий код:
document.addEventListener("readystatechange", function() {
if(document.readyState == "complete") {
document.body.innerHTML += "<a href='javascript://' id='counter' class='none'><img src='//counter.yadro.ru/hit?t26.5;r" + escape(document.referrer) + ((typeof(screen)=="undefined")?"":";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?screen.colorDepth:screen.pixelDepth)) + ";u" + escape(document.URL) + ";" + Math.random() + "'><\/a>";
(function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter111= new Ya.Metrika({ id:111, clickmap:true, trackLinks:true, accurateTrackBounce:true }); } catch(e) { } }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = "https://mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } })(document, window, "yandex_metrika_callbacks");
}
}, false);
Собственно у этих пользователей iOS такая проблема в браузерах Safari и Dolphin, в Chrome всё прекрасно работает.
P.S. Если убрать код с Яндекс.Метрикой, всё заработает.
P.S.S. Т.к. у пользователей Украины заблокировали яндекс, асинхронно подгружаю статистику. Атрибут async и defer пробовал, проблема с асинхронностью не решилась.
UPD: Обнаружил, что проблема в этой строчке:
n.parentNode.insertBefore(s, n);