我正在尝试找到为什么出现这个问题的答案;虽然我已经解决了这个问题,但我想知道它发生的原因。
简述
通过使用非document.write
方法注入相同的 iframe 可以解决突然导致所有版本的 Internet Explorer 停止执行页面的 Google 提供的转化跟踪代码,该代码使用 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);
这样解决了问题,但并没有解释原因:
document.write
、iframe
或者Internet Explorer :) - jtbandes