所以,我试图找到为什么会发生这个问题的答案;我已经解决了这个问题,但我想知道为什么会这样。
TL;博士
谷歌提供的转换跟踪代码使用注入 iframedocument.write
突然导致页面停止在所有版本的 Internet Explorer 中执行,但通过使用非document.write
方法注入相同的 iframe 得到补救。
故事:
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 是危险的,应该避免。但是,谷歌给了我这个代码,所以,我想我可以相信它。
它突然开始破坏我们所有使用 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);
这解决了问题,没有实际解释: