我对JavaScript还比较陌生,所以遇到了些问题。我想要追踪嵌入在我们网站小部件内的AdWords转化数据。用户填写表单后,小部件会在不刷新页面的情况下将结果发布在同一DIV中。我的问题在于,当我试图使用 Google 提供的以下代码将两个脚本元素附加到 DOM 中时(用 appendChild 或者 jQuery 中的 append 方法),页面就变成了 302 重定向到一个空白的 Google 页面(至少 FireBug 是这样显示的)。 我可以为表单结果提供回调方法,并尝试在其中插入 AdWords 追踪代码。以下是 Google 提供的代码:
<script type="text/javascript">
/* <![CDATA[ */
var google_conversion_id = 993834405;
var google_conversion_language = "en";
var google_conversion_format = "3";
var google_conversion_color = "ffffff";
var google_conversion_label = "bSpUCOP9iAIQpevy2QM";
/* ]]> */
</script>
<script type="text/javascript" src="http://www.googleadservices.com/pagead/conversion.js">
</script>
<noscript>
<div style="display:inline;">
<img height="1" width="1" style="border-style:none;" alt="" src="http://www.googleadservices.com/pagead/conversion/993834405/?label=bSpUCOP9iAIQpevy2QM&guid=ON&script=0"/>
</div>
</noscript>
这是很常规的事情。我想做的是使用提供的回调函数将其插入到结果页面中。但无论我是在原始页面加载时还是在回调中插入此代码(使用js或jQuery),都会被重定向,因此回调部分可能不相关,但这就是为什么我不能只将其粘贴到页面代码中的原因。
我尝试了许多不同的方法,但目前我有以下代码(请原谅我的笨拙。目前只是试图硬着头皮解决!):
function matchResultsCallback(data){
var scriptTag = document.createElement('script');
scriptTag.type = "text/javascript";
scriptTag.text = scriptTag.text + "/* <![CDATA[ */\n";
scriptTag.text = scriptTag.text + "var google_conversion_id \= 993834405\;\n";
scriptTag.text = scriptTag.text + "var google_conversion_language \= \"en\"\;\n";
scriptTag.text = scriptTag.text + "var google_conversion_format \= \"3\"\;\n";
scriptTag.text = scriptTag.text + "var google_conversion_color \= \"ffffff\"\;\n";
scriptTag.text = scriptTag.text + "var google_conversion_label \= \"bSpUCOP9iAIQpevy2QM\"\;\n";
scriptTag.text = scriptTag.text + "/* ]]> */\n";
$('body').append(scriptTag);
$('body').append("<script type\=\"text\/javascript\" src\=\"http://www.googleadservices.com/pagead/conversion.js\" />");
//I have also tried this bit above using the same method as 'scriptTag' with no luck, this is just the most recent iteration.
var scriptTag2 = document.createElement('noscript');
var imgTag = document.createElement('img');
imgTag.height = 1;
imgTag.width = 1;
imgTag.border = 0;
imgTag.src = "http://www.googleadservices.com/pagead/conversion/993834405/?label=bSpUCOP9iAIQpevy2QM&guid=ON&script=0";
$('body').append(scriptTag2);
$('noscript').append(imgTag);
}
真奇怪,当我只插入其中一个脚本标签(无论是哪一个)时,它都不会重定向。只有在尝试插入这两个标签时才会重定向。
我还尝试过将第一个脚本标签放入原始页面代码中(因为它没有在任何地方进行调用,只是设置变量),然后仅插入conversions.js文件,但它仍然会重定向。
如果相关的话,我正在使用Firefox 3.6.13,并且在意识到我们使用v1.3之后,已经尝试了包括jQuery 1.3和1.5的代码。
我知道我遗漏了某些东西!有什么建议吗?
document.createElement('noscript');
。哈哈。 - Andrew Bullock$(...).html(...)
函数将执行 JavaScripts,但据我所知,主要问题在于全局变量是用 "var" 关键字定义的。我不确定 append() 函数是否也能正确运行脚本。无论如何,最好使用 Microscopic 答案中的代码(但不包括 'var' 关键字)。 - Alexis Wilkevar foo = 1234;
。然后,通过Ajax调用jQuery('#myDiv').html('<script src="myTestScript.js"></script>');
,发现确实可以访问foo
的值,所以我不确定这是否是问题。(是的,myTestScript.js
甚至在不同的域上) - Funkaalert
等功能,但有趣的是,我的尝试使用document.write
却没有起作用(请参见本页面其他评论),这就是我怀疑这不会按我们所希望的方式工作的原因...使用 iframe 是我在其他几个地方看到的建议,所以我可能稍后会尝试一下,但现在我们将尝试仅使用通常在noscript
块中看到的 1x1 隐藏像素,并查看它是否足够满足客户的需求... - Funka