Почему этот документ document.write iframe ads code полностью нарушает работу Internet Explorer?

Итак, я пытаюсь найти ответ на вопрос, почему возникает эта проблема;Я устранил проблему, но хочу знать, почему это произошло.

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, который БУКВАЛЬНО сломал мои страницы покупок на 25% моего трафика!

В качестве сортировки я быстро заменил тот же код, используя найденную технику инъекции в 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);

Это решило проблему, фактически не объясняя:

Почему почти пустой iframe, введенный с помощью document.write, нарушает работу Internet Explorer, а этот метод выше - нет?

13
задан Yahel 12 July 2011 в 11:31
поделиться