Итак, я пытаюсь найти ответ на вопрос, почему эта проблема происходит; Я исправил проблему, но я хочу знать, почему это произошло.
TL; DR
Код отслеживания конверсий Google, который ввел iframe с использованием document.write
, внезапно заставил страницу перестать выполняться во всех версиях Internet Explorer, но был исправлен путем ввода одного и того же iframe с использованием метода document.write
.
История:
Doubleclick - это рекламная сеть, которая предоставляет фрагмент кода JavaScript для отслеживания конверсий из объявлений.
Отрывок, который они дают, выглядит следующим образом:
<SCRIPT language="JavaScript">
var axel = Math.random()+"";
var a = axel * 10000000000000;
document.write('<IFRAME SRC="https://fls.doubleclick.net/activityi;src=143;type=donat01;cat=indir4;ord=1;num='+ a + '?" WIDTH=10 HEIGHT=10 FRAMEBORDER=0></IFRAME>');
</SCRIPT>
<NOSCRIPT>
<IFRAME SRC="https://fls.doubleclick.net/activityi;src=143;type=donat01;cat=indir4;ord=1;num=1?"
WIDTH=1 HEIGHT=1 FRAMEBORDER=0></IFRAME>
</NOSCRIPT>
Теперь я знаю, что по разным причинам document.write опасен и его следует избегать. Но Google дает мне этот код, поэтому я решил, что могу доверять ему.
Он внезапно начал разбивать все наши страницы для всех пользователей с помощью Internet Explorer. Как и в случае, страница перестанет отображаться полностью, как только она попадет в document.write
. Это было безумно: один из крупнейших сторонних рекламодателей в Интернете дал мне JavaScript, который LITERALLY сломал мои страницы покупок на 25% моего трафика!
Как triage, я быстро заменил в том же коде, используя метод инъекций, найденный в Google Analytics:
var iframe = document.createElement('iframe');
iframe.src = //the URL;
iframe.width = 0;
iframe.height = 0;
iframe.frameborder = 0;
var ref = document.getElementsByTagName('script')[0];
ref.parentNode.insertBefore(iframe, ref);
Это разрешило проблему, фактически не объяснив: