我正在开发一个单页面应用程序,可能会在每个页面加载时触发多个转化。
我需要触发google转化片段,因此我假设可以在运行时将其添加。该片段大致如下:
<script type="text/javascript">
/* <![CDATA[ */
var google_conversion_id = XXXXXXXX;
var google_conversion_language = "en";
var google_conversion_format = "2";
var google_conversion_color = "ffffff";
var google_conversion_label = "XXXXXXXXXXXXXXX";
var google_conversion_value = 25.00;
/* ]]> */
</script>
<script type="text/javascript" src="http://www.googleadservices.com/pagead/conversion.js">
</script>
我一直在使用JavaScript插入片段,当转化发生时。我是这样做的:
function(id,url,content){
// add script
var script = document.createElement("script");
script.type = "text/javascript";
if(url) script.src = url;
if(content) script.text = content;
var bucket = document.getElementById(id);
bucket.appendChild(script);
debugger;
}
我已经在所有我尝试过的浏览器中测试过,但在Safari中无法正常工作。
在Safari中,当添加第二个脚本标签时,整个body标签的内容都被Google iFrame替换了。实际上,整个DOM都被摧毁了。head的内容也被清空了。
到底是什么原因导致Google脚本出现这种情况?如何避免一切都崩溃?
更新:
看起来Safari不喜欢我添加脚本的方式。为了解决这个问题,在debugger
行下面添加了bucket.innerHTML = ''
,这样就可以在Safari中正常工作了。不幸的是,这会导致Firefox 3.6出现之前Safari出现的问题,即摧毁DOM。
更复杂的是,似乎AdWords拒绝了这些转化或其他什么东西,当它们注入到页面时,在报告端不会显示。
我的当前方法是使用htaccess和一些字符串解析生成一个只包含转化片段的页面,并将其嵌入到iFrame中。我会在后续报告。